npmでpermission deniedになった時の対処法[mac]


この記事について

npmを利用してinstallしたりupgradeしたりする際にpermission deniedと表示されてしまった時に助けになるかもしれない記事です。


現象

npmコマンドを実行したところ以下のようなエラーが出てしまう

npm ERR! Darwin 15.5.0

npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "update" "-g"
npm ERR! node v5.6.0
npm ERR! npm v3.7.1
npm ERR! path /usr/local/lib/node_modules/npm/node_modules/aproba
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/node_modules/aproba'
npm ERR! at Error (native)
npm ERR! { [Error: EACCES: permission denied, access '/usr/local/lib/node_modules/npm/node_modules/aproba']
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'access',
npm ERR! path: '/usr/local/lib/node_modules/npm/node_modules/aproba' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR! /Users/<任意のディレクトリ>/npm-debug.log


原因

不明・・・


対策

npm公式HPにありました。


対策1:npmのデフォルトディレクトリの権限を変更する


  1. npmディレクトリのパスを確認する

    npm config get prefixを実行するとおそらく/usr/localが表示される

    注意:もしディレクトリのパスが/usrとなっていた場合は対策2に進んでください


  2. npmディレクトリのオーナーを自分のアカウントに変更する
    sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}


対策2:npmのデフォルトディレクトリを別のディレクトリに変更する


  1. グローバルインストールのためのディレクトリを作成する

    mkdir ~/.npm-global


  2. 新しいディレクトリを使う設定をnpmで行う
    npm config set prefix '~/.npm-global'


  3. ~/.profileを開くか作成し,以下の行を追加する

    export PATH=~/.npm-global/bin:$PATH


  4. 3の変更を反映する
    source ~/.profile


対策3:パッケージマネージャ使ってnodeを再インストールする

brew install node


参考リンク

03 - Fixing npm permissions | npm Documentation