それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

mac os で npm i がgyp エラーになるときのサクッとした対応

npm i がエラーになる

npm は利用しているmac のバージョンを見ていて、npm は該当のpython を呼びに行く 私の場合、最新版のmacOSはなるべく使わないことにしているので、python2 がないと怒られた。

takuya@~$ npm i
npm ERR! code 1
npm ERR! gyp verb check python checking for Python executable "python2" in the PATH
npm ERR! gyp verb `which` failed Error: not found: python2
(snip)
npm ERR! gyp ERR! stack   File "<string>", line 1
npm ERR! gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
npm ERR! gyp ERR! stack                       ^
npm ERR! gyp ERR! stack SyntaxError: invalid syntax

mac brew 環境での npm i の gyp 環境のエラーは、殆どの場合python パスのエラー

対応

python のバージョンを変えてあげる

pyenv local system
npm i

または、python2 を作ってあげる

ln -sr /usr/bin/python2.7 /usr/local/bin/python2

npm をどうやって入れたかによる。

再度インストール

rm node_modules/ -rf
npm i

node_modules に中途半端なコンパイルが残るので一回消しておくほうが無難。

それでもだめな場合

node のバージョンと、npm のバージョン、そしてパッケージのバージョンを見直す

要は、package.json に記載されたバージョンが古いままで、いまのnodeだとコンパイルが通らないとかある。

たとえば、node-sassの4.0x は最新のnodeだとインストール時にエラーになる。

npm -i # エラー(package.json が4 を指してる)
npm -i node-sass@4  # エラー
npm -i node-sass@6  # インストールできる

またはその逆で、nodeを古い方にあわせる

brew install node@14
brew unlink node
brew link node@14 --force-overwite 
npm i 
brew unlink node@14
brew link node