npm環境に関するエラーでかなり時間を費やし、悔しい思いをしたので、整理して投稿いたします。
現象
下記のようなエラーがどうしても出る。
$ zsh: command not found: npm
経緯
久しく触ってなかった環境で npm i
したところインストールできず(ここのエラーは覚えてない)、 下記のようにグローバルインストールするとなにやらpermissionに関するエラーが生じた。
npm i -g
権限がない?ならば sudo
すればいけるやんと反射的に下記のように管理者権限での実行を行う
$ sudo npm i -g
すると、npmを認識しなくなりました。
経緯の推測
上記のpermission errorが出るようになったきっかけとして下記の3つが候補として挙げられました。
- Nodeのバージョン変更
- 自作npmモジュールのpackage.json内のbinの記述ミス
- 環境変数の$PATHミス(今まで動作していたので関係なさそう)
検索すると一番有力なのは、もちろん1のNodeのバージョン変更でした。(変更したかな?・・・)
ちなみに環境変数の$PATHの指定先、usr/local/share/にnpmディレクトリが存在してませんでした。なぜ。。。
解決策
安直に npm command not found
で検索すると同様なケースがちら・ほら。
とりあえず下記の手順でいけました。
- .bash_profileの作成
- nodebrewのインストール
- nodeのインストール(同時にnpmもインストールされる)
3番で2度つまづいたので、少し書きます。
nodeのインストール
1.nodeインストールできない問題
下記のようにバージョンを指定してインストールするのですが、directoryがないというエラーが出てしまいます。
nodebrew install-binary v8.9.1
ですので、先にdirectoryを作成(mkdir)してあげましょうね。というお話でした。
Node.jsのインストールに失敗する時の解決策
2.npmがインストールされない問題
本来であれば上記のコマンドが成功した段階でnpmコマンドを使用できるのですが、
npm -v
としてもやはり zsh: command not found: npm
が出てくるというものです。
この問題は、使用するNodeのバージョンを指定することで解決できました。
nodebrew use v8.9.1
以前にインストールしたNodeのバージョンが優位になってたのかもしれないですね。
教訓
- 安易な「権限がない?ならば
sudo
すればいけるやん」はやめて、じっくりエラー文と睨めっこした方が良い -
npm i -g
自体が非推奨であることを理解する