npmの権限関係エラーの対処法
現象
Error No.127
npm ERR! code 127 npm ERR! path /home/hogehoge npm ERR! command failed npm ERR! command sh -c create-next-app "fugafuga" "https://github.com/~~~~~" npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2021-03-23T02_49_40_026Z-debug.log
と遭遇した
環境
ubuntu18.04(WSL)
npmバージョン/7.6.3
上記は$PATH関係か、タイポなどで起こるエラーっぽい。詳しくは後述。
npmの公式サイトでは、-g
オプションでグローバルインストールしたときなどにpermission deniedされた場合の対処法として、以下が推奨されているようです。
対処法
npm config get prefix
でnpmディレクトリのパスの所在を確認
ここでやることが変わる。
ケース1
"/usr/local"
にあったときは、
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
npmディレクトリのオーナーを自分のアカウント(whoami)に変更する
でOK
ケース2
"/usr"
にあったときは、 docs.npmjs.com を参考に、
1.npmのグローバルインストール用のディレクトリを作成
mkdir ~/.npm-global
2.上記で作成したディレクトリをprefixのパスにセットする(npmの権限を~/.npm-globalに変更)
npm config set prefix '~/.npm-global'
3.パスを通す
export PATH=~/.npm-global/bin:$PATH
(あるいはvi .bashrc
で直接記述する)
source ~/.profile
でOK
やらかしたこと
①前日の夜中にタイポを権限関係のエラーと誤認して、パスを/.npm-globalに通したまま寝る→
②npmのパスが作業ディレクトリ(/usr/local/)にないので弾かれる(sudoでいけると思ったけど駄目でした)→
そこからなんやかんやあってタイポでパスを飛ばすなどやらかし、結局
- export PATH=~/usr/local/bin:$PATHして、
- npm config set prefix '/usr/local'でパスを通す
- n packageでnodejs, npmを入れなおす
- ケース1に戻る
という工程を踏んで復旧させました。
Error No.127は②で起こっていたエラーで、/home/hogehogeにパスないよ、と怒られていたわけです。(回り道をしてしまっていた)
寝ぼけ頭で作業するとあかんですね。気を付けます...
参考
npmでpermission deniedになった時の対処法[mac] - Qiita
Resolving EACCES permissions errors when installing packages globally | npm Docs
【備忘録】Node.jsでパーミッションで怒られが発生してグローバルインスコができなくなったときに読むもの | Tech_Kazu.log