node.js を 12.18 から 14.5 にアップデートしたときに sharp パッケージのインストール失敗しました。 原因の究明と解決するまでの手順、ログ等を記録しておきます。同じような方がいて参考にでもなったらいいな。
npm install で、下のようなエラーが発生して npm パッケージのインストールが中断する。
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! sharp@0.23.4 install: `(node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the sharp@0.23.4 install script.
sharp@0.23.4 パッケージのインストールで失敗したよー、と出ている。 ちょっとさかのぼると、さらに sharp パッケージに関連するエラーログで、
> sharp@0.23.4 install C:\Users\amaji\Desktop\dev\htdocs\nodachisoft_www\node_modules\sharp
> (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)
prebuild-install WARN install No prebuilt binaries found (target=14.5.0 runtime=node arch=x64 libc= platform=win32)
sharpパッケージの事前ビルドされたバイナリがないよーと、上ログの 3 行目に出ている。
自分の場合、最新の nodejs(バージョン 14.5.0)に合う バイナリが見つからなかったので、ローカルで node-gyp が C++ 使って sharp モジュールを生成(コンパイル)しようとしたよ。
そのために、node-gyp が python と VisualStudio の C++ compiler を使おうとしたんだけど PC内を探したけど見つかんなかったよ!残念。
ということでした。
ですので、解決のためには、node-gyp がちゃんと動くようにして、sharp モジュールをコンパイルすることが必要そうです。
npm の sharp パッケージは png や webp などの画像リサイズ、SVG トレース、再圧縮などの機能をもつ画像加工パッケージ。 ライブラリ自体の詳しい説明は (英語)npmjs - sharp をご参照。
筆者の場合は、静的サイトジェネレータである Gatsby フレームワークのプラグインの中で使われていました。
これがうまく動かないと、プロジェクトを立ち上げて静的サイトジェネレートしている時(画像を加工してくれる処理)に 落ちます。
node-gyp は クロスプラットフォームでネイティブな、プラグインとかの追加モジュールをコンパイルするツール。 動作には Python と Visual C++ 関連のコンパイラが必要。
npm install のエラーログとして、
そのあとのログで、node-gyp のエラーログが含まれていた。 node-gyp で、sharp パッケージを展開してコンパイルしよう!として、node-gyp 動作のために Python 探したけど見つからないよー、というエラー。
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - "python" is not in PATH or produced an error
(中略)
gyp ERR! find Python You need to install the latest version of Python.
python だけ個別にインストールしてリトライしたら、Python 見つからないエラーは消えたけど 下のような VisualStudio C++ がないよー!というエラーログが。
gyp ERR! find VS msvs_version not set from command line or npm config
gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
gyp ERR! find VS checking VS2019 (16.4.29728.190) found at:
gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community"
gyp ERR! find VS - found "Visual Studio C++ core features"
gyp ERR! find VS - found VC++ toolset: v142
gyp ERR! find VS - missing any Windows SDK
gyp ERR! find VS could not find a version of Visual Studio 2017 or newer to use
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - not found
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studiogyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
上のような、Visual Studio の Windows SDK がみつかんなかったよ。インストールしてね!というログがでていた。
ちゃんと node-gyp が動くように設定していきましょう!
node-gyp 公式 の README ページを読むと、Microsoft の「windows-build-tools」を npm でインストールする必要があるよ、とのこと。
まずは node-gyp をグローバルにインストールしておく。
npm install -g node-gyp
次に以下を実行する。管理者権限が必要なので注意です。
管理者権限で実行するいくつかの方法は別の記事でまとめてますので、 よければご参考にして頂いて好きな手順でどうぞー。
npm install --global -production windows-build-tools
これで node-gyp と相性の良いバージョンの python も一緒にインストールしてくれる。 ちなみに私はここで 30 分くらい待った。
Python インストールにそんなに長い時間かかるわけないよね、、と思いながら正座で待ちました。
Successfully installed Python 2.7 という表示がしばらく続いて、 固まってるんじゃないかとドキドキ。30分まって、やっぱり処理が止まってると判断しました。笑
一旦処理を
+ で強制停止。自分の環境を確認したところ、別途インストールした Python があったためアンインストール。 再度、windows-build-tools のインストールを実行したらあっさり完了。
複数の python がインストールされてる端末でなければここで作業はおしまい。
※「windows-build-tools」でインストールされた python が古いので、python 使って開発している人は別に もっと新しい python を使ってるかも。node-gyp 対応 python は v2.7, v3.5, v3.6, v3.7, v3.8 のようです。 (最新の情報は (英語)公式- Configuring Python Dependency をご参照)
複数の python が入っている場合は、 windows-build-tools と python のセットをインストールした後 に node-gyp が使用する python を設定する必要があるようです。
※「windows-build-tools」をインストールした直後は、環境変数 PATH に python が追加されてるので、一度コマンドラインを閉じて再度起動する必要あり。
node-gyp に互換のある Python を指定してあげることができる。
C:\> where python
C:\Users\amaji\.windows-build-tools\python27\python.exe
C:\Users\amaji\scoop\shims\python.exe
C:\Users\amaji\AppData\Local\Microsoft\WindowsApps\python.exe
C:\> node-gyp configure set python C:\Users\amaji\scoop\shims\python.exe
私の環境の例では 1 行目の where コマンドで python の実行ファイルのパス一覧を表示し、5行目で node-gyp が使う python を「C:\Users\amaji\scoop\shims\python.exe」に指定しています。
プロジェクトが動くことを確認。 自分の場合は VisualStudioCode を使用してます。
環境変数が変わってますので、一度 VisualStudioCode を再立ち上げ。
無事にプロジェクトの npm install が成功し、 Sharp パッケージの C++ のファイルたち(.cppファイルたち)がコンパイルされていくログが流れて完了。
やった!
ちゃんとプロジェクトも立ち上がり、sharp パッケージによる画像加工も正常に動作しました。
おしまい。
コメント、ありがとうございます。
ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。
Twitter:@NodachiSoft_jpお名前:以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください
お名前: