npm install で node-gyp エラーが発生したときの解決方法
npm でインストールしていた iconv のバージョンを update しようとしたら node-gyp rebuild というエラーメッセージが表示されて、インストールできませんでした。
何度もこのエラーと戦ってきたので、解決方法をまとめてみました。(最終更新日:2020年4月24日)
npm install でエラー
$ npm install ... npm ERR! Darwin 17.7.0 npm ERR! argv "/Users/username/.nvm/versions/v6.11.0/bin/node" "/Users/username/works/myapp/node_modules/.bin/npm" "install" npm ERR! node v6.11.0 npm ERR! npm v3.9.2 npm ERR! code ELIFECYCLE npm ERR! iconv@2.3.1 install: `node-gyp rebuild` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the iconv@2.3.1 install script 'node-gyp rebuild'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the iconv package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! node-gyp rebuild npm ERR! You can get information on how to open an issue for this project with: npm ERR! npm bugs iconv npm ERR! Or if that isn't available, you can get their info via: npm ERR! npm owner ls iconv npm ERR! There is likely additional logging output above. npm ERR! Please include the following file with any support request: npm ERR! /Users/username/works/myapp/npm-debug.log |
node-gyp rebuild しても、これでは解決できませんでした。
(解決方法 1) npm cache clean
npm cache clean
npm install |
npm install 後に iconv がインストールされたことを確認して作業完了です。
$ npm ls | grep iconv@ ├─┬ iconv@2.3.1 |
(解決方法 2) Command Line tools 再インストール
以下のような gyp: No Xcode or CLT version detected! エラーが発生したときの対処方法です。
$ npm install
> [email protected] install /Users/youruser/example/public/node_modules/fsevents
> node-gyp rebuild
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.
No receipt for 'com.apple.pkg.DeveloperToolsCLILeo' found at '/'.
No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'.
gyp: No Xcode or CLT version detected!
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/Users/youruser/.nvm/versions/node/v12.16.2/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:351:16)
gyp ERR! stack at ChildProcess.emit (events.js:310:20)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Darwin 19.4.0
gyp ERR! command "/Users/youruser/.nvm/versions/node/v12.16.2/bin/node" "/Users/youruser/.nvm/versions/node/v12.16.2/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/youruser/example/public/node_modules/fsevents
gyp ERR! node -v v12.16.2
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] install: `node-gyp rebuild`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1
audited 10199 packages in 3.362s
37 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
以下のように Command Line tools を再インストールして npm install し直せば、解決しました。
sudo rm -rf $(xcode-select -print-path)
xcode-select --install
npm cache clean --force
npm install
(解決方法 3) common.gypi の MACOSX_DEPLOYMENT_TARGET 変更
(背景) macOS アップグレード
今回は macOS Mojave へアップグレード後に発生しました。
common.gypi ファイルの場所を確認
まず、エラーが出ていたときに利用していた Node.js バージョンの common.gypi ファイルの場所を探します。
$ find ~/.node-gyp -name common.gypi /Users/yourname/.node-gyp/6.11.1/include/node/common.gypi |
注意点
/Users/yourname/.nvm/versions/v6.11.0/include/node/common.gypi とありますが、こちらではないです。お間違えなく。
MACOSX_DEPLOYMENT_TARGET の置換
COMMON_GYPI_PATH=/Users/yourname/.node-gyp/6.11.1/include/node/common.gypi |
$ grep MACOSX_DEPLOYMENT_TARGET $COMMON_GYPI_PATH 'MACOSX_DEPLOYMENT_TARGET': '10.7', # -mmacosx-version-min=10.7 $ grep 10.7 $COMMON_GYPI_PATH 'MACOSX_DEPLOYMENT_TARGET': '10.7', # -mmacosx-version-min=10.7 |
TMPFILE="$(mktemp /tmp/XXXXXX)" # replace 10.7 with 10.9 sed -e "s/10\.7/10\.9/g" $COMMON_GYPI_PATH > $TMPFILE mv $TMPFILE $COMMON_GYPI_PATH |
(解決方法 4) PKG_CONFIG_PATH
エラーメッセージ
> canvas@1.6.11 install /Users/yourname/works/yourapp/node_modules/canvas > node-gyp rebuild (node:68901) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added. Use emitter.setMaxListeners() to increase limit Package libffi was not found in the pkg-config search path. Perhaps you should add the directory containing `libffi.pc' to the PKG_CONFIG_PATH environment variable Package 'libffi', required by 'gobject-2.0', not found gyp: Call to './util/has_lib.sh freetype' returned exit status 0 while in binding.gyp. while trying to load binding.gyp gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1 gyp ERR! stack at ChildProcess.onCpExit (/Users/yourname/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:345:16) gyp ERR! stack at ChildProcess.emit (events.js:189:13) gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12) gyp ERR! System Darwin 18.5.0 gyp ERR! command "/Users/yourname/.nvm/versions/node/v10.15.3/bin/node" "/Users/yourname/.nvm/versions/node/v10.15.3/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" gyp ERR! cwd /Users/yourname/works/yourapp/node_modules/canvas gyp ERR! node -v v10.15.3 gyp ERR! node-gyp -v v3.8.0 gyp ERR! not ok npm WARN The package babel-core is included as both a dev and production dependency. npm WARN The package node-mocks-http is included as both a dev and production dependency. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] install: `node-gyp rebuild` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the [email protected] install script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /Users/yourname/.npm/_logs/2019-04-02T09_05_59_468Z-debug.log npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] install_all: `npm install` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the [email protected] install_all script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /Users/yourname/.npm/_logs/2019-04-02T09_05_59_540Z-debug.log |
PKG_CONFIG_PATH の確認
$ echo $PKG_CONFIG_PATH /Users/yourname/.gvm/pkgsets/go1.11/global/overlay/lib/pkgconfig: |
echo $PKG_CONFIG_PATH で確認したところ gvm で使ってるなにかに PKG_CONFIG_PATH が設定されており、これが原因のようでした。
PKG_CONFIG_PATH の設定
PKG_CONFIG_PATH に libffi への PATH も設定後 npm install することで解決しました。
# http://opamp.hatenablog.jp/entry/20120316/1331908752 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH/usr/local/opt/libffi/lib/pkgconfig |
以上、node-gyp エラーを定期的に解決してる現場からお送りしました。