npm install で node-gyp エラーが発生したときの解決方法


npm でインストールしていた iconv のバージョンを update しようとしたら node-gyp rebuild というエラーメッセージが表示されて、インストールできませんでした。

何度もこのエラーと戦ってきたので、解決方法をまとめてみました。

npm

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) 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

(解決方法 3) 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! canvas@1.6.11 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the canvas@1.6.11 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! example.com@1.0.0 install_all: `npm install`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the example.com@1.0.0 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 エラーを定期的に解決してる現場からお送りしました。

参考情報

  1. コメントはまだありません。

  1. トラックバックはまだありません。