nvm と Node.js を使ってみる

nvm って?

nvm(Node Version Manager) は Node.js のバージョンマネージャ。コマンドラインにて異なるバージョンの node を使えるようにできる。node については後述。

下記のような感じで、コマンドライン上で node の切り替えやインストールなどができるようになる。

$ nvm use 16
Now using node v16.9.1 (npm v7.21.1)
$ node -v
v16.9.1
$ nvm use 14
Now using node v14.18.0 (npm v6.14.15)
$ node -v
v14.18.0
$ nvm install 12
Now using node v12.22.6 (npm v6.14.5)
$ node -v
v12.22.6

nvm インストール

brew を使って nvm をインストール

% brew install nvm

nvm — Homebrew マニュアルに従い、下記を実行する。

% mkdir ~/.nvm

パスを追加するために、.zshrc に下記を追加する

export NVM_DIR="$HOME/.nvm"
[ -s "$(brew --prefix)/opt/nvm/nvm.sh" ] && \. "$(brew --prefix)/opt/nvm/nvm.sh" # This loads nvm
[ -s "$(brew --prefix)/opt/nvm/etc/bash_completion.d/nvm" ] && \. "$(brew --prefix)/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion

次にパスを更新するために下記を実行する。

% source ~/.zshrc
% nvm -v
0.39.2 # <= nvm のバージョンが表示される

Node.js って?

Node.js は Web サーバでもなければ Rails のような Web フレームワークでもなく、JavaScript の実行環境。

JavaScript 単体では Web ブラウザ上でしか機能しないが、Node.js を用いることで、それが動作する OS の機能を(権限内で)利用できるようになる。

image.png Node.jsとはなにか?なぜみんな使っているのか? - Qiita

nvm で Node.js をインストールする

Node.js には長期サポートバージョンがあるので、それをインストールする。下記は長期サポートの最新版をインストールする際のコマンド。

% nvm install --lts
% nvm ls
->     v18.12.1
         system
default -> lts/* (-> v18.12.1)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v18.12.1) (default)
stable -> 18.12 (-> v18.12.1) (default)
lts/* -> lts/hydrogen (-> v18.12.1)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.21.1 (-> N/A)
lts/gallium -> v16.18.1 (-> N/A)
lts/hydrogen -> v18.12.1

最後に、~/.zshrc に下記を追加する。

# 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

上記をすると、.nvmrc ファイルのあるディレクトリに入ると、自動的に nvm use を呼び出すようになる。つまり、当該プロジェクトが動く Node.js のバージョンを判断して起動してくれるようになる。

参考