経緯・現象
Yarn でパッケージインストール時に以下のエラーが表示される現象が発生しました。
ただし、パッケージのインストール自体は正常に完了していて、 npm scripts も一見正常に動作しているように見えるのですが……。
[5/5] Rebuilding all packages...
[10/12] ⠄ mozjpeg
[8/12] ⠄ mozjpeg
[3/12] ⠄ cpu-features
[9/12] ⠄ optipng-bin
warning Error running install script for optional dependency: "C:\\path\\to\\project\\node_modules\\cpu-features: Command failed.
Exit code: 1
Command: node buildcheck.js > buildcheck.gypi && node-gyp rebuild
Arguments:
Directory: C:\\path\\to\\project\\node_modules\\\cpu-features
Output:
C:\\path\\to\\project\\node_modules\\buildcheck\\lib\\index.js:133
throw new Error('Unable to detect compiler type');
^
## 略
success Saved lockfile.
success Saved 732 new dependencies.
info Direct dependencies
見た感じ、 node-gyp のリビルド時にエラーになってしまっているように見受けられます。
また、同じ package.json
を同じ Node.js, npm, Yarn のバージョンの2つの異なるマシンで動かしたところ、片方はこの現象が発生し、もう片方は現象が発生しませんでした。
> node -v
v18.12.1
> npm -v
8.19.3
> yarn version
yarn version v1.22.19
info Current version: 0.12.0
question New version:
Done in 0.72s.
現象が発生しなかった方のマシンには、諸事情により複数バージョンの Python がインストールされていました。
- 2.7.13 (2.7.13150)
- 2.7.15 (2.7.15150) 64bit
- 3.7.1 (3.7.1150.0) 32bit
この辺りが現象有無の分岐点でしょうか。
対処
(準備) 必要なパッケージをインストール
- Python 3.11.1 インストール
- Visual Studio C++ Build Tools 2022 インストール
> npm config set msvs_version 2022
> npm config set python path\to\user\AppData\Local\Programs\Python\Python311\python.exe
これでインストールと設定を通してみます。この状態で次の対処を実施。
対処1 node-gyp を入れ直す
> npm install -g node-gyp
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
added 95 packages, and audited 96 packages in 5s
5 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
まずは node-gyp を入れ直してみました。が、変化なし。
対処2 リビルド
> npm rebuild -g node-gyp
rebuilt dependencies successfully
node-gyp をリビルドしてみましたが、変化なし。
3 設定を通す
> npm config set msvs_version 2017
>
Microsoft Visual C++ 2017 Redistributable (x64) が入っていたので msvs_version 2017 の設定だけ通してみました。が、変化なし。
これらを行った後にPC自体を再起動しても変化なし。
うーん……。
追記 (2022/12/13)
試しに Python 2系 でも試してみます。Windows x86-64 MSI installerを選択してインストール。
> npm config set python C:\Python27\python.exe
>
再起動して再度 yarn
しましたがNG。
Visual C++ の開発環境を入れ直してみます。
C++ のデスクトップ開発環境にチェックを入れてインストールし直します。
> npm config set msvs_version 2022
>
これでもう一度再起動して yarn
してみるも結果変わらず。
> npm config ls -l
//registry.npmjs.org/:_authToken = (protected)
msvs_version = "2022"
python = "C:\\Python27\\python.exe"
npm config ls -l
で設定の一覧を出力して設定内容を確認。ちなみに Python 3系 でもダメでした。
> yarn cache clean
> npm uninstall -g node-gyp
note: using Volta to uninstall node-gyp
Removed executable 'node-gyp' installed by 'node-gyp'
success: package 'node-gyp' uninstalled
> npm install -g node-gyp
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
added 95 packages, and audited 96 packages in 1s
5 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
> npm rebuild -g node-gyp
rebuilt dependencies successfully
関係ないとは思いつつもプロジェクト内の yarn
のキャッシュを削除し、 node-gyp
も一度アンインストールしてから再度インストール&リビルドしました。これで再起動してもエラーになるヶ所は変わらず。
うーん……。
参考
- node-gyp rebuild is failing · Issue #2144 · nodejs/node-gyp · GitHub
- Python 3系をインストールしたらどうか、という回答が付いている
- Windowsでnpm installしてnode-gypでつまずいた時対処方法 – Qiita
- もし Windows で node-gyp のエラーで詰んでしまった場合にやること – Discord.js Japan User Group
- node-gyp でビルド通すまで | Oqiita Memo
- Visual Studio Tools のダウンロード – Windows、Mac、Linux 用の無料インストール
- Download Python | Python.org