9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

homebrewでnodenvを更新する際の注意点(shimsの再生成)

Last updated at Posted at 2023-06-28

はじめに

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を確認してみると

.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
.nodenv/shims/node
# *中略*
exec "/opt/homebrew/Cellar/nodenv/1.4.1/libexec/nodenv" exec "$program" "$@"

shimsの中身を確認すると、ファイルパスも現バージョンの1.4.1になっていました。

参考文献

この記事はニジボックス投稿リレー企画、3日目の記事です。
次の投稿は@sakamuuyさんです!

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?