VSCodeで作業していてnvmでNode.jsの管理をしていましたが毎回立ち上げるとVSCodeのNodeのバージョンかデフォルトに戻ってしまったので.nvmrcがあると自動でNodeのバージョンを切り替えるようにしてみました。
nvmの公式にzshで.nvmrcが存在するときの自動で読み込んでくれるレシピが公開されています。
環境の用意
【ubuntu】zsh環境で.zshrcを分割するを行っている状態で.zsh.dに.nvmrcがあると自動読み込み用のファイルnvm-autoload.zsh追加しましょう。
~/
└.zshrc
└~/.zsh.d
└ nvm-autoload.zsh
nvm-autoload.zsh中身
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
nvm use
fi
elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
place this after nvm initialization!とありますが自分は.zshrcの分割で.zsh.dの読み込みを一番最後に記述しているのでこの条件は問題ないです。
.zshrcの一部
# いろいろかいているので省略
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# .zshrcを分割しているので読み込む
ZSHHOME="${HOME}/.zsh.d"
if [ -d $ZSHHOME -a -r $ZSHHOME -a \
-x $ZSHHOME ]; then
for i in $ZSHHOME/*; do
[[ ${i##*/} = *.zsh ]] &&
[ \( -f $i -o -h $i \) -a -r $i ] && . $i
done
fi
指定のプロジェクトに.nvmrcを記載する
実際のプロジェクトに.nvmrcを定義(例で16.17.1にしています。
16.17.1
そのディレクトリーに行くと
うまく16.17.1になっています。
自分の環境ではv18.10.0がデフォルトなので.nvmrcファイルがない場合はデフォルトに戻ります。
コメント