Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2020年7月21日に更新

npm install で sharp パッケージのインストールに失敗する

node.js を 12.18 から 14.5 にアップデートしたときに sharp パッケージのインストール失敗しました。 原因の究明と解決するまでの手順、ログ等を記録しておきます。同じような方がいて参考にでもなったらいいな。

事象

npm install で、下のようなエラーが発生して npm パッケージのインストールが中断する。

sharpパッケージのいストール失敗ログ
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パッケージのバイナリないよーというログ
> 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 モジュールをコンパイルすることが必要そうです。

sharp パッケージとは

npm の sharp パッケージは png や webp などの画像リサイズ、SVG トレース、再圧縮などの機能をもつ画像加工パッケージ。 ライブラリ自体の詳しい説明は (英語)npmjs - sharp をご参照。

筆者の場合は、静的サイトジェネレータである Gatsby フレームワークのプラグインの中で使われていました。

  • gatsby-plugin-sharp
  • gatsby-plugin-manifest
  • gatsby-remark-images-contentful
  • gatsby-source-contentful
  • gatsby-transformer-sharp
  • gatsby-transformer-sqip

参考:Gatsby 公式 - sharp 使ってるところ

これがうまく動かないと、プロジェクトを立ち上げて静的サイトジェネレートしている時(画像を加工してくれる処理)に 落ちます。

node-gyp パッケージとは

node-gyp は クロスプラットフォームでネイティブな、プラグインとかの追加モジュールをコンパイルするツール。 動作には Python と Visual C++ 関連のコンパイラが必要。

npm install 時のエラーログを追ってみる

npm install のエラーログとして、

そのあとのログで、node-gyp のエラーログが含まれていた。 node-gyp で、sharp パッケージを展開してコンパイルしよう!として、node-gyp 動作のために Python 探したけど見つからないよー、というエラー。

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++ がないよー!というエラーログが。

VisualStudioナイヨーなログ
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 が動くように設定していきましょう!

node-gyp 公式 の README ページを読むと、Microsoft の「windows-build-tools」を npm でインストールする必要があるよ、とのこと。

まずは node-gyp をグローバルにインストールしておく。

 
node-gypをグローバルでインストール
npm install -g node-gyp

windows-build-tools と python のインストール

次に以下を実行する。管理者権限が必要なので注意です。

管理者権限で実行するいくつかの方法は別の記事でまとめてますので、 よければご参考にして頂いて好きな手順でどうぞー。

 
windows-buildtoolsをglobalでインストール
npm install --global -production windows-build-tools

これで node-gyp と相性の良いバージョンの python も一緒にインストールしてくれる。 ちなみに私はここで 30 分くらい待った。

Python インストールにそんなに長い時間かかるわけないよね、、と思いながら正座で待ちました。

installing_python_failed

Successfully installed Python 2.7 という表示がしばらく続いて、 固まってるんじゃないかとドキドキ。30分まって、やっぱり処理が止まってると判断しました。笑

一旦処理を Ctrl+ C で強制停止。

自分の環境を確認したところ、別途インストールした 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 が端末内に入っているとき

複数の python が入っている場合は、 windows-build-tools と python のセットをインストールした後 に node-gyp が使用する python を設定する必要があるようです。

※「windows-build-tools」をインストールした直後は、環境変数 PATH に python が追加されてるので、一度コマンドラインを閉じて再度起動する必要あり。

node-gyp に互換のある 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 パッケージによる画像加工も正常に動作しました。

おしまい。

参考

変更履歴

  • 2020/07/21 初版公開
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

関連ありそうな記事(2件)です!

node.jsバージョンアップ時のエラー対応記録「Cannot find module @babel/compat-data/corejs3-shipped-proposals」

#Node.js✎ 2020-07-21
node.js をバージョンアップして発生するエラー「Cannot find module @babel/compat-data/corejs3-shipped-proposals」を解消した記録
広告領域
追従 広告領域
目次
npm install で sharp パッケージのインストールに失敗する
npm install で sharp パッケージのインストールに失敗する
事象
事象
原因と解決への方針
原因と解決への方針
sharp パッケージとは
sharp パッケージとは
node-gyp パッケージとは
node-gyp パッケージとは
npm install 時のエラーログを追ってみる
npm install 時のエラーログを追ってみる
エラー解消に向けての作業手順
エラー解消に向けての作業手順
node-gyp のインストール
node-gyp のインストール
windows-build-tools と python のインストール
windows-build-tools と python のインストール
複数の python が端末内に入っているとき
複数の python が端末内に入っているとき
設定完了後
設定完了後
参考
参考
変更履歴
変更履歴
Nodachisoft © 2020