npm のグローバルインストールに失敗したら
macOS Mojave 環境にて。この前久々に npm パッケージをグローバルインストールしようとしたら、以下のようなエラーが出た。
$ npm install -g @neos21/neos21
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR! { [Error: EACCES: permission denied, access '/usr/local/lib/node_modules']
npm ERR! stack:
npm ERR! 'Error: EACCES: permission denied, access \'/usr/local/lib/node_modules\'',
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'access',
npm ERR! path: '/usr/local/lib/node_modules' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).
# コンソールがこのまま止まってしまったので Control + C で終了させた
はて、グローバルインストール先の /usr/local/lib/node_modules/
に書き込み権限がないとな。
グローバルの npm 関連のディレクトリは、以下のように調べられる。
$ npm config get prefix
/usr/local
$ npm root -g
/usr/local/lib/node_modules
$ npm bin -g
/usr/local/bin
コレでいくと、今回問題になっているのは $ npm root -g
コマンドで取れるパスのディレクトリなので、ココの権限をチェックしてみる。
$ ls -l /usr/local/lib
# 途中省略
drwxr-xr-x 3 toor admin 96 7 23 16:21 node_modules
drwxrwxr-x 79 Neos21 admin 2528 11 21 14:40 pkgconfig
おや、node_modules/
ディレクトリの所有者が違うわい。
ということで、以下のコマンドを叩いて解決。
$ sudo chown -R $(whoami) $(npm root -g)
# コマンドを使わないで書いたとしたらこんな感じ
$ sudo chown -R Neos21 /usr/local/lib/node_modules
コレでグローバルインストールできるようになった。
- 参考 : npmでpermission deniedになった時の対処法 - Qiita … 今回の問題に一番近い文献。「対策1」が今回のベースになっている。
- 参考 : グローバルにインストールしたnode moduleがnot foundになる時の対処 - Qiita … グローバルの npm モジュールの場所に関して。