建設予定地

当面はやったことの備忘録

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