はじめに
homebrewで管理しているnodenvをアップデートする際に、brew upgrade
だけだと上手くいかなかった、という話です。
バージョン固有の問題かは不明ですが、他に同じ問題に当たった人の参考になることを願って共有します。
結論
homebrewでnodenvをアップデートする際は、古いshimsを削除して再生成しましょう。
rm -r .nodenv/shims/
nodenv rehash
あらすじ
- M1 Macにて、nodenvのアップデートをおこなった(homebrewで
1.4.0
から1.4.1
)。 - アップデート後にnpmコマンドを実行したらエラーが出た。
- 原因は、shims内で、実行可能ファイルへのファイルパスが旧バージョンのままになっていたこと。
-
.nodenv/shims
を削除してnodenv rehash
で解決した。
shims内のファイルパスが旧バージョンのまま
以下に示すのは、npmコマンド実行時に出たエラーメッセージの一つです。
/Users/{username}/.nodenv/shims/node: line 21: /opt/homebrew/Cellar/nodenv/1.4.0/libexec/nodenv: No such file or directory
問題となっているファイル.nodenv/shims/node
を確認してみると
# *中略*
exec "/opt/homebrew/Cellar/nodenv/1.4.0/libexec/nodenv" exec "$program" "$@"
ファイルパスの途中で、旧バージョンのものであろうディレクトリ1.4.0
を指定していました。
そもそもshimsとは
- shimとは、ターミナルから入力されたnode.jsのコマンドと、nodenvで設定されたnode.jsバージョンのコマンド実行ファイルを仲介するスクリプト。
-
nodenv rehash
にてshimが生成される。 - 新たなnpmパッケージをインストールした際には、rehashで該当パッケージのコマンドのshimを生成する必要がある。
nodenv rehash
を実行する必要があるのは、新規npmパッケージをインストールした時、という認識でした。しかし、どうやらnodenv自体をアップデートした際も実行する必要がありそうです。
shimsを再生成
単にnodenv rehash
を実行したところ、shimsは更新されませんでした。
shims内のファイルを全て削除した後に再度実行したところ、エラーが解消されました。
rm -r .nodenv/shims/
nodenv rehash
# *中略*
exec "/opt/homebrew/Cellar/nodenv/1.4.1/libexec/nodenv" exec "$program" "$@"
shimsの中身を確認すると、ファイルパスも現バージョンの1.4.1
になっていました。
参考文献
この記事はニジボックス投稿リレー企画、3日目の記事です。
次の投稿は@sakamuuyさんです!