macでnpm install 時にEACCESSエラーが出る
macでnodeやnpmバージョンアップした後、 sudo npm install などでroot権限でインストールしたあとにnpmで以下のエラーが出るようになってしまった
npm ERR! Darwin 13.4.0 npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "babel-cli" npm ERR! node v4.6.0 npm ERR! npm v3.10.8 npm ERR! path /usr/local/lib/node_modules npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall access
この場合npm install時に毎回参照されるnpm default directoryの権限がおかしくなっていると思い、 /usr/local/lib/node_modules以下の権限を見てみると、オーナーがrootになっていた
$ cd /usr/local/lib/node_modules $ ls -Fal total 0 drwxr-xr-x 13 24561 wheel 442 10 24 23:34 ./ drwxrwxrwx 93 root admin 3162 6 2 01:01 ../ drwxr-xr-x 219 root wheel 7446 10 24 23:34 .staging/ drwxr-xr-x 8 nobody staff 272 3 14 2015 async/ drwxr-xr-x 13 nobody staff 442 1 23 2016 coffee-script/ drwxr-xr-x 13 nobody staff 442 12 15 2013 express/ drwxr-xr-x 8 nobody staff 272 9 5 2014 express-generator/ drwxr-xr-x 8 nobody staff 272 1 23 2016 generator-hubot/ drwxr-xr-x 19 nobody staff 646 1 23 2016 hubot/ drwxr-xr-x 6 nobody staff 204 7 10 2015 n/ drwxr-xr-x 27 root wheel 918 10 23 15:07 npm/ drwxr-xr-x 14 nobody staff 476 4 12 2016 request/ drwxr-xr-x 6 nobody staff 204 1 23 2016 yo/
どう対処したか
多少強引ではあるが、mac環境でsudo npm installをすると rootユーザでnpm installするなみたいな警告がでていたので オーナーを自分のユーザに戻した
$sudo chown -R testuser /usr/local
これで解決した
他のアプローチで対処できるのか
npm 公式のトラブルシューティングに対策が幾つか書いてある
その他の方法としては以下の方法があり、上記urlにまとまってます。