at backyard

Color my life with the chaos of trouble.

ディレクトリ、またはプロジェクトごとに利用しているNode.jsのバージョンを自動的に切り替える方法(nvm使用)

ディレクトリ・プロジェクト内で設定されているNode.jsのバージョンを自動的に切り替える

前提条件

ここでは nvm を利用して、この設定を行うので、まずは nvm がインストールされていることが条件。

nvmrcをプロジェクトルートに置くことで、自動的に切り替えるようにする

nvm を利用して、プロジェクトごとに異なるNode.jsのバージョンを利用して開発を行うケースがある。

このような場合、こっちのプロジェクトではNodeのv12系、こちらではNodeのv10系に切り替える、などといちいちNode.jsのバージョンの切り替えを行うのが大変手間である。

nvm ではプロジェクトで利用しているNode.jsのバージョンを記載した .nvmrc ファイルをプロジェクトのルートに置いておくことで、ディレクトリを移動した際に勝手にNode.jsのバージョンを読み取って、使用しているNode.jsのversionに自動的に切り替えるやり方がある。

設定の方法はnvmのREADMEに記載されていた。
私はzshを使っているので、下記を参考にした。

https://github.com/nvm-sh/nvm#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file

上にも書いてあるが、自身の ~/.zshrc 内に下記を追記すればOKだった。
(これをそのままコピペするだけで動く)

# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  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" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

.nvmrcが用意されているプロジェクトに移動したタイミングで、.nvmrcに記述されたnodeのversionを読み取って、nvm useしてくれる。
(そのバージョンがないローカルにない場合、 nvm install してくれるようだ)

この設定を行ってから、Node.jsの開発がだいぶ楽になったので、備忘録として残しておく。

そう言えば過去にnvm関連の投稿をしていたので、そちらも載せておく。
(最近 nvm を更新していなかったことに今気づいたので、これ見て nvm のversionあげたところ。ちなみにアップデート前の最新のコミットログが2018年だった..)

nvmのインストールとアップデート(nvm自体のversionを挙げるとき)のメモ - at backyard