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/<アカウント名>/works/github/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

参考リンク

docs.npmjs.com