0
0

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 3 years have passed since last update.

Homebrewでインストールされたnvmのデフォルトプレフィクスがホームディレクトリ以下に変更になりました

Posted at

TL;DR

Homebrewでnvmをインストールしている人限定の話です。
NVM_DIRをrcファイルに記載していない人の環境は一旦ぶっ壊れます。(nvmのアップデートで毎回ぶっ壊れていたので問題ないでしょう)
これからは、NVM_DIRを.bashrcなり.zshrcに指定しなくても、nvm関連のファイルは自動的に~/.nvm以下にインストールされるようになります。
つまり、以下をrcファイルに指定するだけで正しい動作をするようになったんです!

Intel
[ -s "/usr/local/opt/nvm/nvm.sh" ] && \. "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
M1
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"  # This loads nvm

プルリク

去年の8月から作業してました。

説明

Arch LinuxのAURと同じことをするようにしただけです。

nvm.sh
# $NVM_DIR should be "$HOME/.nvm" by default to avoid user-installed nodes destroyed every update
[ -z "$NVM_DIR" ] && export NVM_DIR="$HOME/.nvm"
\. /usr/local/Cellar/nvm/0.39.1_1/libexec/nvm.sh
# "nvm exec" and certain 3rd party scripts expect "nvm.sh" and "nvm-exec" to exist under $NVM_DIR
[ -e "$NVM_DIR" ] || mkdir -p "$NVM_DIR"
[ -e "$NVM_DIR/nvm.sh" ] || ln -s /usr/local/opt/nvm/libexec/nvm.sh "$NVM_DIR/nvm.sh"
[ -e "$NVM_DIR/nvm-exec" ] || ln -s /usr/local/opt/nvm/libexec/nvm-exec "$NVM_DIR/nvm-exec"

まず、NVM_DIRが設定されていなければ~/.nvmに設定します。これがHomebrewでのデフォルト値になります。
次に本物のnvm.shを読み込みます。
最後にNVM_DIRが存在しなければディレクトリを作成し、それ以下にnvm.shとnvm-execが存在しない場合はそれぞれの本物にシンボリックリンクを貼ります。いくつかのnvmのプラグインがNVM_DIR以下にこの2つのスクリプトが存在していることを前提とした動作をするらしいのでこのようなコードが追加されています。

なぜこのような実装が必要になったか

nvmはNVM_DIRが設定されていない場合、nvm.shの実体がある場所をデフォルトのNVM_DIRとして設定します。
Homebrewの場合、/usr/local/opt/nvm/libexecのようなパスに設定されるのですが、このoptディレクトリというのがクセ者で、nvmが更新される度に全消しされます。
実体は/usr/local/Cellar/nvm/0.39.1_1のような位置にあり、更新のたびに全消しされるのはHomebrewの仕様上仕方ないことです。
どうもnvmの作者であるljharbはこの問題が発生するたびにnvmにIssueが立つのにキレたらしく、Homebrew経由でnvmをインストールすると以下の警告文が表示されます。

Please note that upstream has asked us to make explicit managing
nvm via Homebrew is unsupported by them and you should check any
problems against the standard nvm install method prior to reporting.

ljharbの主張は、「ユーザーがインストールしたnodeは神聖な物であり、何人たりともそれを破壊することは許されない」だそうです。(どこで主張していたかは忘れました)

結論

今回の変更で、Homebrewはnvmがインストールしたユーザーのnodeにデフォルトで触らなくなったので、早くHomebrew経由のインストールがnvm公式が推奨するインストール方法の一つとして認められるといいなと願っております。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?