(失敗) Yarn でパッケージインストール時に node-gyp rebuild のエラーが表示される

経緯・現象

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++ の開発環境を入れ直してみます。

Visual Studio C++ Buildtools の入れ直し
Visual Studio C++ Buildtools の入れ直し

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 も一度アンインストールしてから再度インストール&リビルドしました。これで再起動してもエラーになるヶ所は変わらず。

うーん……。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。