npm公式サイトのドキュメントによると、対策法は以下の3つ
【対策1】:npmのデフォルトディレクトリのパーミッション(オーナー)を変更する。
・手順1
npmのデフォルトディレクトリを確認する。
npm config get prefix
たいていの場合は /usr/local になる。もし/usrの場合はパーミッションがめちゃくちゃになるので、対策2にする。
・手順2
npmのデフォルトディレクトリのオーナーを変更する。
sudo chown -R user_name(ユーザー名) /usr/local(npmのデフォルトディレクトリ)/node_modules
必要に応じて /usr/local/bin、/usr/local/share も変更する。【対策2】npmのデフォルトディレクトリを変更する。
npmのデフォルトディレクトリが/usrなどの場合、他のユーザーと共有している場合などに問題になるので、npmのデフォルトディレクトリを変更する。
・手順1 グローバルインストール用のディレクトリ(例: ~/.npm-global)を作成する。
mkdir ~/.npm-global
・手順2 npmのデフォルトディレクトリを設定する。
npm config set prefix '~/.npm-global'
・手順3 パスを通す ~/.profileを開いて
export PATH=~/.npm-global/bin:$PATH
・手順4 パスを反映する
source ~/.profile
~/.profileを編集したくない場合などは手順2〜4の替わりに、インストール時にENV変数を使う方法もある。
NPM_CONFIG_PREFIX=~/.npm-global npm install -g jshint
【対策3】パッケージマネージャーを使う
MacではHomebrewでnodeをインストールすることでこの問題を避けることができる。
brew install node
参考:03 - Fixing npm permissions | npm Documentation