【ubuntu】nvmがインストールされているプロジェクトで.nvmrcに定義したNode.jsに自動で切り替える。

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ファイルがない場合はデフォルトに戻ります。

コメント