nvm を使って Node.js を Mac にインストール

nvm(Node Version Manager)を Mac にインストールして Node.js の開発環境を構築し、任意の Node.js のバージョンを利用する方法についての解説(覚書)です。

nvm を使うと、複数の Node.js のバージョンをインストールして必要に応じて切り替えたり、プロジェクト毎に異なる Node.js のバージョンを使用することもできます。

作成日:2022年1月15日

使用している環境は以下になります。

nvm 公式ページ:github.com/nvm-sh/nvm

関連ページ:Node.js を Mac にインストール(nodebrew の使い方)

nvm を Mac にインストール

nvm のドキュメントに macOS に関するトラブルシュートとして以下のような記述があります(翻訳が正しくない可能性があります)。

  • macOS 10.15以降、デフォルトのシェルは zsh であり、nvm は更新するために .zshrc を検索しますが、.zshrc はデフォルトではインストール(作成)されていないので、 touch ~/.zshrc で作成してインストールスクリプトを実行します。
  • 以前のデフォルトシェルである bash を使用する場合、.bash_profile ファイルがシステムにない可能性があるので、.bash_profile がない場合は touch ~/.bash_profile で作成し、インストールスクリプトを実行し、source ~/.bash_profile を実行して、nvm コマンドを取得します。
  • 以前に bash を使用していたが、zsh がインストールされている場合は これらの行を〜/ .zshrcに手動で追加して、. ~/.zshrc を実行する必要があります。
  • ターミナルを再起動するか、. ~/.nvm/nvm.sh を実行する必要がある場合があります。ターミナルを再起動するか、新しいタブ/ウィンドウを開くか、source コマンドを実行すると、コマンドと新しい構成がロードされます。

また、Homebrew を使ったインストールはサポートされてない(Homebrew installation is not supported.)とも記述されています(インストールできないわけではありません)。

この例の macOS はバージョン12.1(Monterey/Intel)ですが、シェルは bash を使用しています。.bash_profile ファイルはすでに作成してあります。

.bash_profile があるかどうかは以下の ls -a コマンドで確認できます。

//ホームディレクトリの全てのファイル(隠しファイルを含む)をリスト表示
$ ls -a ~/  return  
.			.bashrc			Downloads
..			.viminfo		Library
.CFUserTextEncoding	.zsh_history		Movies
.DS_Store		.zsh_sessions		Music
.Trash			Applications		Pictures
.bash_history		Creative Cloud Filess	Public
.bash_profile		Desktop		
.bash_sessions		Documents

関連項目:環境設定ファイル

インストールスクリプトを実行

Xcode コマンドラインツール(xcode command line tools)がインストールされていない場合は、nvm をインストールするインストールスクリプトを実行する前にインストールしておきます。

OS X 10.9 以降、/usr/bin/git は Xcode コマンドラインツールによって事前設定されています。つまり、Git がインストールされているかどうかを正しく検出できません。 インストールスクリプトを実行する前に、Xcode コマンドラインツールを手動でインストールする必要があります。

Troubleshooting on macOS より

Xcode コマンドラインツールのインストール

ターミナルで以下を実行すると、ポップアップウィンドウが表示されるので「インストール」をクリックして Xcode コマンドラインツールをインストールできます。

Xcode コマンドラインツールのインストール
$ xcode-select --install  return

環境設定ファイルの作成

環境設定ファイル(.bash_profile または .zshrc)が作成されていない場合は作成します。

bash シェルを使用している場合で、.bash_profile がまだ作成されていない場合は、以下のように touch コマンドを使って作成できます。

.bash_profile の作成(bash シェルを使用している場合)
$ touch ~/.bash_profile  return

zsh シェルを使用している場合で、.zshrc がまだ作成されていない場合は、以下のように touch コマンドを使って作成できます。

.zshrc の作成(zsh シェルを使用している場合)
$ touch ~/.zshrc  return

~/.bash_profile

以下はこの例の場合の .bash_profile です。.bashrc を読み込む設定を記述します。

~/.bash_profile
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

関連項目:~/.bashrc と ~/.bash_profile の作成

nvm をインストール

nvm をインストールするにはインストールスクリプトを実行する必要があり、以下の cURL または Wget コマンドを実行するか、ダウンロードして手動でインストールします。

実際にインストールする際は nvm のページで最新のコマンドを確認します。以下のコマンドは v0.39.1 をインストールします。

cURL コマンド
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
Wget コマンド
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

以下は cURL コマンドを使って nvm をインストールする例です。

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash  return
		
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15037  100 15037    0     0   143k      0 --:--:-- --:--:-- --:--:--  151k
=> Downloading nvm from git to '/Users/xxxxxx/.nvm'
=> Cloning into '/Users/xxxxxx/.nvm'...
remote: Enumerating objects: 354, done.
remote: Counting objects: 100% (354/354), done.
remote: Compressing objects: 100% (302/302), done.
remote: Total 354 (delta 40), reused 156 (delta 27), pack-reused 0
Receiving objects: 100% (354/354), 206.98 KiB | 1.30 MiB/s, done.
Resolving deltas: 100% (40/40), done.
* (HEAD detached at FETCH_HEAD)
  master
=> Compressing and cleaning up git repository

=> Appending nvm source string to /Users/xxxxxx/.bashrc
=> Appending bash_completion source string to /Users/xxxxxx/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -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    

ターミナルを再起動

上記コマンドのレスポンスの最後の方に「すぐに使用するにはターミナルを閉じて再度開き、nvm の使用を開始するか、次を実行します。」とあるのでターミナルを再起動します。

または、source コマンドを実行して変更を反映させることもできます。

$ source ~/.bash_profile return  //bash の場合
//source ~/.zshrc (zsh の場合)

~/.bashrc

.bashrc を確認すると以下のように既存の設定の後に nvm の設定が追加されています(3〜5行目)。

~/.bashrc の例
PS1="\W \$ "  #プロンプトの指定(独自に指定してあった設定)

export NVM_DIR="$HOME/.nvm"
[ -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

zsh でも nvm を使用する場合は ~/.zshrc にも nvm の設定を追加し、source ~/.zshrc を実行します。

※ 上記の ~/.bashrc に追加された設定と同じです。nvm のドキュメントの Manual Install の「Now add these lines to your ~/.bashrc, ~/.profile, or ~/.zshrc ・・・」以下に記載されています。

~/.zshrc の例
PROMPT='%1~ %# '  #プロンプトの指定(独自に指定してあった設定)
#以下を追加
export NVM_DIR="$HOME/.nvm"
[ -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

nvm のインストールの確認

nvm がインストールされたかどうかを確認するには以下を実行し、nvm と表示されればインストールは成功です。

$ command -v nvm  return
nvm  //インストール成功

nvm のバージョンは以下で確認できます。

$ nvm --version  return
0.39.1

nvm の使い方

例えば、最新の LTS(Long Term Support)バージョンの Node.js をインストールするには nvm install に「最新の LTS バージョン」を意味する --lts を指定します。

バージョン番号などを指定してインストールすることもできます。詳細は Node.js のインストール

$ nvm install --lts  return
		
Installing latest LTS version.  //最新の LTS バージョンをインストール中
Downloading and installing node v16.13.2...
Downloading https://nodejs.org/dist/v16.13.2/node-v16.13.2-darwin-x64.tar.xz...
######################################################################################################## 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v16.13.2 (npm v8.1.2)
Creating default alias: default -> lts/* (-> v16.13.2)

上記のように --lts を指定して nvm install コマンドを実行すると、コマンドを実行した時点での最新の LTS 版の Node(この例では v16.13.2)がインストールされます。

10行目には「Creating default alias」とありますが、これは最初にインストールした Node.js のバージョンがデフォルト(default)にされていることを表しています。

上記9行目のレスポンスに使用する Node.js と npm のバージョンが表示されていますが、以下はそれぞれのコマンドで Node.js と npm のバージョンを確認する例です。

$ node -v  return  //node コマンドでバージョンを確認
v16.13.2

$ npm -v  return  //npm コマンドでバージョンを確認
8.1.2

これで Node.js の v16.13.2(及び npm の 8.1.2)を使うことができます。

$ node return  //REPL が起動
Welcome to Node.js v16.13.2.
Type ".help" for more information.
> .help return  //.help を実行
.break    Sometimes you get stuck, this gets you out
.clear    Alias for .break
.editor   Enter editor mode
.exit     Exit the REPL
.help     Print this help message
.load     Load JS from a file into the REPL session
.save     Save all evaluated commands in this REPL session to a file

Press Ctrl+C to abort current expression, Ctrl+D to exit the REPL
> .exit return  //.exit を実行して終了

関連項目:Node.js を使ってみる

nvm では複数の Node.js のバージョンをインストールして、必要に応じて切り替えて利用できます。

インストール可能なバージョンは nvm ls-remote で確認できます。

複数のバージョンをインストールした場合、特に指定しなければ、最初にインストールしたデフォルト(default)のバージョンが使用されます。

バージョンを切り替えて使用するには nvm use でバージョンを指定します。また、プロジェクト別にバージョンを管理することもできます。

以下は用意されている各種コマンドの使い方などの詳細です。

--help ヘルプ

nvm コマンドに --help を指定してヘルプを表示することができます。

ls-remote インストール可能なバージョンを表示

nvm コマンドに ls-remote を指定して実行するとインストール可能な Node.js のバージョンを確認することができます。但し、以下のコマンドで出力される実際のリストはとても長いです(600行以上)。

表示の絞り込み

コマンドにオプションの引数を指定して表示するリストを限定することができます。version を指定するとマッチするバージョンのリストを表示します。また、--lts や --lts=コードネーム、エイリアスなどを指定できます。

nvm ls-remote [version]

以下はインストール可能なバージョン17 の一覧を表示する例です。

$ nvm ls-remote 17  return  //バージョン17 の一覧を表示
//nvm ls-remote v17 でも同じ
  v17.0.0
  v17.0.1
  v17.1.0
  v17.2.0
  v17.3.0
  v17.3.1

LTS(Long Term Support)リリースのバージョンみを表示するには、--lts または lts/* を指定します。

$ nvm ls-remote --lts  return  //インストール可能な LTS リリースを表示
		
  v4.2.0   (LTS: Argon)
  v4.2.1   (LTS: Argon)
  ・・・中略・・・
  v4.8.7   (LTS: Argon)
  v4.9.0   (LTS: Argon)
  v4.9.1   (Latest LTS: Argon)
  v6.9.0   (LTS: Boron)
  v6.9.1   (LTS: Boron)
  ・・・中略・・・
  v6.16.0   (LTS: Boron)
  v6.17.0   (LTS: Boron)
  v6.17.1   (Latest LTS: Boron)
  v8.9.0   (LTS: Carbon)
  v8.9.1   (LTS: Carbon)
  ・・・中略・・・
  v8.16.1   (LTS: Carbon)
  v8.16.2   (LTS: Carbon)
  v8.17.0   (Latest LTS: Carbon)
  v10.13.0   (LTS: Dubnium)
  v10.14.0   (LTS: Dubnium)
  ・・・中略・・・
  v10.23.3   (LTS: Dubnium)
  v10.24.0   (LTS: Dubnium)
  v10.24.1   (Latest LTS: Dubnium)
  v12.13.0   (LTS: Erbium)
  v12.13.1   (LTS: Erbium)
  ・・・中略・・・
  v12.22.7   (LTS: Erbium)
  v12.22.8   (LTS: Erbium)
  v12.22.9   (Latest LTS: Erbium)
  v14.15.0   (LTS: Fermium)
  v14.15.1   (LTS: Fermium)
  ・・・中略・・・
  v14.18.1   (LTS: Fermium)
  v14.18.2   (LTS: Fermium)
  v14.18.3   (Latest LTS: Fermium)
  v16.13.0   (LTS: Gallium)
  v16.13.1   (LTS: Gallium)
  v16.13.2   (Latest LTS: Gallium)

参考

LTS のコードネーム Fermium の一覧を表示するには以下のように指定できます。

$ nvm ls-remote --lts=fermium  return
// または nvm ls-remote lts/fermium
  v14.15.0   (LTS: Fermium)
  v14.15.1   (LTS: Fermium)
  v14.15.2   (LTS: Fermium)
  v14.15.3   (LTS: Fermium)
  v14.15.4   (LTS: Fermium)
  v14.15.5   (LTS: Fermium)
  v14.16.0   (LTS: Fermium)
  v14.16.1   (LTS: Fermium)
  v14.17.0   (LTS: Fermium)
  v14.17.1   (LTS: Fermium)
  v14.17.2   (LTS: Fermium)
  v14.17.3   (LTS: Fermium)
  v14.17.4   (LTS: Fermium)
  v14.17.5   (LTS: Fermium)
  v14.17.6   (LTS: Fermium)
  v14.18.0   (LTS: Fermium)
  v14.18.1   (LTS: Fermium)
  v14.18.2   (LTS: Fermium)
  v14.18.3   (Latest LTS: Fermium)

tail コマンドや grep コマンドなどと組み合わせて表示する一覧を絞り込むことができます。

以下はパイプtail コマンドを使って末尾の10行を表示する例です。

$ nvm ls-remote --lts | tail  return
  v14.17.4   (LTS: Fermium)
  v14.17.5   (LTS: Fermium)
  v14.17.6   (LTS: Fermium)
  v14.18.0   (LTS: Fermium)
  v14.18.1   (LTS: Fermium)
  v14.18.2   (LTS: Fermium)
  v14.18.3   (Latest LTS: Fermium)
  v16.13.0   (LTS: Gallium)
  v16.13.1   (LTS: Gallium)
  v16.13.2   (Latest LTS: Gallium)

以下は grep を使って LTS の Latest(最新版)を表示する例です。

$ nvm ls-remote --lts | grep Latest  return
         v4.9.1   (Latest LTS: Argon)
        v6.17.1   (Latest LTS: Boron)
        v8.17.0   (Latest LTS: Carbon)
       v10.24.1   (Latest LTS: Dubnium)
       v12.22.9   (Latest LTS: Erbium)
       v14.18.3   (Latest LTS: Fermium)
->     v16.13.2   (Latest LTS: Gallium)

Node.js のインストール

以下が Node.js をインストールする書式です。

version には Node.js のバージョンを指定してインストールすることができます。

バージョンは先頭に v を付けても付けなくても大丈夫です(16.13.2 や v16.13.2 など)。また、16.13 と指定すれば 16.13.* の最新版が、16 と指定すれば 16.*.* の最新版がインストールされます。

nvm install [version] 

バージョンを指定する代わりに alias(エイリアス)を指定することもできます。

インストールの指定例
nvm install 8.0.0  //バージョン 8.0.0 をインストール
nvm install v8.0.0  //バージョン 8.0.0 をインストール(上記と同じ)
nvm install 14.17  //バージョン 14.17.* の最新版をインストール
nvm install 12   //バージョン 12.*.* の最新版をインストール
nvm install node  //最新のバージョンをインストール(alias を指定)
nvm install --lts  //最新の LTS バージョンをインストール(alias を指定)
nvm install --lts=argon  //Argon の最新の LTS バージョンをインストール(alias を指定)

以下は最新のバージョンの Node.js をインストールする例です。「node」は最新バージョンの Node を表すエイリアスです。

$ nvm install node  return  //最新バージョンの Node.js をインストール
Downloading and installing node v17.3.1...
Downloading https://nodejs.org/dist/v17.3.1/node-v17.3.1-darwin-x64.tar.xz...
######################################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v17.3.1 (npm v8.3.0)

以下はバージョンを指定してインストールする例です。

$ nvm install 14.18.3  return  //バージョン 14.18.3 をインストール
Downloading and installing node v14.18.3...
Downloading https://nodejs.org/dist/v14.18.3/node-v14.18.3-darwin-x64.tar.xz...
######################################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v14.18.3 (npm v6.14.15)

現在の Node.js のバージョンを確認するとインストールされたバージョンになっています。

$ node -v  return 
v14.18.3
alias(エイリアス)

nvm では以下のような alias(エイリアス:別名)が設定されています。

alias 意味
default デフォルトの Node.js のバージョン。最初にインストールしたバージョンがデフォルトの Node.js として使用されます。nvm alias default で変更可能。
node 最新バージョンの Node.js
iojs 最新バージョンの io.js
stable 現在は非推奨(node とほぼ同じ意味で、代わりに node を使用)
--lts 最新の LTS バージョン
--lts=xxxx コードネームが xxxx の最新の LTS バージョン。例 --lts=argon
lts/* 最新の LTS バージョン(--lts と同じ)
lts/xxxx コードネームが xxxx の最新の LTS バージョン(--lts=xxxx と同じ)。例 lts/argon

alias(エイリアス)の設定を確認

alias は実際にインストールされているバージョンによりどのバージョンが該当するかが異なります。nvm alias で現在設定されている alias(エイリアス)を確認することができます。

$ nvm alias  return  //alias の設定を確認
		  
default -> lts/* (-> v16.13.2)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v17.3.1) (default)
stable -> 17.3 (-> v17.3.1) (default)
lts/* -> lts/gallium (-> v16.13.2)
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.9 (-> N/A)
lts/fermium -> v14.18.3
lts/gallium -> v16.13.2

default は一番最初にインストールした version になります。N/A は該当は該当するバージョンがインストールされていないことになります(Not Available)。

インストール済のバージョンを表示する nvm ls でもその時点での alias を確認することができます。

alias の default を変更・設定

一番最初にインストールしたバージョンが alias の default になります。default を変更(または再設定)するには nvm alias default にバージョンを指定します。

$ nvm alias default 14.18.3   return  //alias の default を変更
default -> 14.18.3 (-> v14.18.3)

$ nvm alias  return  //alias の設定を確認
default -> 14.18.3 (-> v14.18.3)    //default が変更された
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v17.3.1) (default)
stable -> 17.3 (-> v17.3.1) (default)
lts/* -> lts/gallium (-> v16.13.2)
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.9 (-> N/A)
lts/fermium -> v14.18.3
lts/gallium -> v16.13.2
nvm cache clear キャッシュの削除

Node.js のバージョンをインストールしようとしてインストールが失敗した場合は、nvm cache clear を実行して、キャッシュされたノードのダウンロードを削除すると良いようです(Problems)。

$ nvm cache clear  return
nvm cache cleared.

ls インストール済のバージョンを表示

nvm ls を実行すると、現在 nvm でインストールされている Node.js のバージョンを表示します。

以下の例では3つのインストール済みの Node.js のバージョンが表示されています。また、現時点でのエイリアスも表示されています。

$ nvm ls  return
->     v14.18.3   //インストール済み
       v16.13.2   //インストール済み
       v17.3.1    //インストール済み
//以下はこの時点のエイリアス
default -> lts/* (-> v16.13.2)   
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v17.3.1) (default)
stable -> 17.3 (-> v17.3.1) (default)
lts/* -> lts/gallium (-> v16.13.2)
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.9 (-> N/A)
lts/fermium -> v14.18.3
lts/gallium -> v16.13.2

current 現在利用しているバージョンを表示

現在利用している(アクティブ化されている) Node.js のバージョンを表示するには nvm current を実行します。

$ nvm current  return //現在アクティブ化されている Node.js のバージョンを表示
v14.18.3

以下の node コマンドでも現在の Node.js のバージョンを確認できます。

$ node -v  return   // Node.js のバージョンを表示(node コマンド)
v14.18.3

use バージョンの切り替

nvm はインストールした任意のバージョンの Node.js を簡単に切り替えて使うことができます。

使用する Node.js のバージョンを切り替えるには nvm use にバージョンやエイリアスを指定します。

$ nvm use 16.13.2  return   // バージョン16.13.2 を使用
Now using node v16.13.2 (npm v8.1.2)

以下は nvm ls で現在インストールされている Node.js やそのエイリアスを表示し、use でエイリアスを指定して切り替える例です。

$ nvm ls  return   //インストール済のバージョンとエイリアスを表示
       v14.18.3
->     v16.13.2
        v17.3.1
default -> lts/* (-> v16.13.2)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v17.3.1) (default)
stable -> 17.3 (-> v17.3.1) (default)
lts/* -> lts/gallium (-> v16.13.2)
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.9 (-> N/A)
lts/fermium -> v14.18.3
lts/gallium -> v16.13.2

$ nvm use lts/fermium  return   //エイリアス lts/fermium を指定
Now using node v14.18.3 (npm v6.14.15)

$ nvm current  return   //現在利用しているバージョンを表示
v14.18.3

$ node -v  return   //Node.js のバージョンを表示
v14.18.3

$ nvm use node  return   //エイリアス node(最新版) を指定
Now using node v17.3.1 (npm v8.3.0)

$ nvm current  return   //現在利用しているバージョンを表示
v17.3.1

$ nvm use default  return  //エイリアス default(最初にインストールした Node.js) を指定
Now using node v16.13.2 (npm v8.1.2)

最新の npm へアップグレード

現在利用している Node.js のバージョンでサポートされている最新の npm バージョンを取得(アップグレード)するには、以下を実行します。

$ nvm install-latest-npm
//使用するバージョンを指定(この例の場合は最新版のエイリアスを指定)
$ nvm use node  return   
Now using node v17.3.1 (npm v8.3.0)

//現在利用しているバージョンでサポートされている最新の npm バージョンを取得
$ nvm install-latest-npm  return   
Attempting to upgrade to the latest working version of npm...
* Installing latest `npm`; if this does not work on your node version, please report a bug!

changed 29 packages, and audited 215 packages in 1s

10 packages are looking for funding
  run `npm fund` for details

3 moderate severity vulnerabilities

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
npm notice 
npm notice New patch version of npm available! 8.3.0 -> 8.3.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v8.3.1
npm notice Run npm install -g npm@8.3.1 to update!
npm notice 
* npm upgraded to: v8.3.1

$ npm -v  return   //npm バージョンをを表示(8.3.1 にアップグレードされた)
8.3.1

Node.js のバージョンの削除

インストールした Node.js をアンインストール(削除)するには nvm uninstall にバージョンやエイリアスを指定して実行します。

但し、現在利用している Node.js のバージョンはアンインストールできません(他のバージョンをアクティブにしてからアンインストールする必要があります)。

$ nvm current  return  //現在利用している Node.js のバージョンを表示
v17.3.1

$ nvm uninstall 17.3.1  return  //現在利用しているバージョンを削除(できない)
nvm: Cannot uninstall currently-active node version, v17.3.1 (inferred from 17.3.1).

$ nvm use --lts  return  //他のバージョン(最新の LTS)を使用
Now using node v16.13.2 (npm v8.1.2)

$ nvm uninstall 17.3.1  return  //バージョン17.3.1 をアンインストール(削除)
Uninstalled node v17.3.1

$ nvm ls  return  //インストール済のバージョンを表示(17.3.1 が削除されている)
       v14.18.3
->     v16.13.2
default -> lts/* (-> v16.13.2)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.13.2) (default)
stable -> 16.13 (-> v16.13.2) (default)
lts/* -> lts/gallium (-> v16.13.2)
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.9 (-> N/A)
lts/fermium -> v14.18.3
lts/gallium -> v16.13.2

注意(default のバージョンの削除)

現在利用している Node.js のバージョンは削除できませんが、default のバージョンはメッセージも表示されず削除できてしまいます。

default のバージョンを削除すると、デフォルトで使用するバージョンがなくなるので、ターミナル(シェル)を再起動後は毎回 use で指定しなければならなくなります。

例えば、default が v14.18.3 の場合に、v14.18.3 を削除してしまうと、以下のように default が N/A (Not Available→存在しない)になります。

$ nvm ls  return //インストール済のバージョンを表示
->     v16.13.2 //インストール済のバージョン
default -> v14.18.3 (-> N/A)  //default がない

$ nvm alias default  return   //alias の default を確認
default -> v14.18.3 (-> N/A)  //default がない

また、default のバージョンがないとターミナル(シェル)を再起動後に nvm current を実行すると none となり、nvm use でバージョンを指定して使用することはできますが、毎回指定しなければなりません。

$ nvm current  return //現在利用しているバージョンを表示
none  //current が none 

$ node -v  return  //node コマンドでバージョンを表示
-bash: node: command not found  //node が見つからない

$ nvm use v16.13.2  return   //use で指定
Now using node v16.13.2 (npm v8.1.2)

default のバージョンがないと不便なので、nvm alias default でデフォルトで使用するバージョンを指定して再設定します(デフォルトで使用したいバージョンがインストールされていない場合は、使用するバージョンをインストールしてから再設定します)。

$ nvm alias default v16.13.2  return //デフォルトを再設定
default -> v16.13.2

$ nvm ls  return 
->     v16.13.2
default -> v16.13.2   //default が設定された
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.13.2) (default)
stable -> 16.13 (-> v16.13.2) (default)
・・・以下省略・・・

プロジェクト別 Node.js のバージョン管理

nvm では必要に応じてプロジェクト毎に異なる Node.js のバージョンを管理(使用)することができます。

プロジェクト毎に異なる Node.js のバージョンを管理するには、そのプロジェクトで使用するバージョン番号を記述した .nvmrc というテキストファイルを作成し、プロジェクトのルートフォルダに配置します。

そして .nvmrc を配置したディレクトリで「バージョンを指定せずに nvm use を実行」すると Node.js のバージョンが .nvmrc に記述されているバージョンに切り替わります。

.nvmrc を配置したディレクトリで「バージョンを指定せずに」nvm install や nvm exec、nvm run を実行する際も .nvmrc に記述されているバージョンが参照されます。

.nvmrc ファイル

.nvmrc ファイルにはバージョン番号または node や lts/* などの alias(エイリアス) を記述します。また、以下の決まりがあります。

  • バージョン番号(または alias)の後に改行が必要です。
  • バージョン番号(または alias)の後にスペースを入れることはできません。

※バージョン番号は 16.13.2 のようにフルで記述する他に、16.13 と記述すれば 16.13.* の最新版が適用されます。

以下は projectY というディレクトリで、16.13.2 というバージョン番号を記述した .nvmrc ファイルを作成して、nvm use を実行して Node.js のバージョンを切り替える例です。

$ cd projectY   return  //projectY フォルダへ移動

$ nvm current  return  //現在のバージョンを確認
v14.18.3

$ echo "16.13.2" > .nvmrc  return  //.nvmrc を作成(バージョン 16.13.2 を記述)

$ cat .nvmrc  return  //.nvmrc の内容を確認
16.13.2

$ nvm use  return  //バージョンを指定せずに nvm use を実行
Found '/Users/foo/nvm-sample/projectY/.nvmrc' with version <16.13.2>
Now using node v16.13.2 (npm v8.1.2) //.nvmrc が見つかったのでバージョンが変わる

$ nvm current  return  // Node.js のバージョンが切り替わる
v16.13.2

上記の例では、echo とリダイレクトで .nvmrc を作成していますが、テキストエディタなどで作成して配置することもできます。但し、.nvmrc は隠しファイルなので shift + command + . などで表示させる必要があるかもしれません。

以下は projectZ というディレクトリに .nvmrc ファイルを配置し、ターミナルで projectZ に移動して nvm use を実行する例です。

nvm-sample
  └── projectZ
      └── .nvmrc
.nvmrc(lts/fermium は Fermium の最新の LTS バージョンのエイリアス。※改行が必要)
lts/fermium
		  

以下を実行

$ cd projectZ  return  //projectZ ディレクトリに移動

$ nvm current  return   //現在のバージョンを確認
v16.13.2

$ nvm use  return  //バージョンを指定せずに nvm use を実行
Found '/Users/foo/nvm-sample/projectZ/.nvmrc' with version <lts/fermium>
Now using node v14.18.3 (npm v6.14.15)

$ nvm current  return   //現在のバージョンを確認
v14.18.3  //バージョンが切り替わっている
cd で自動的に nvm use を実行

プロジェクトごとにバージョンを切り替えるには、前述のようにプロジェクトのルートディレクトリにバージョン番号やエイリアスを記述した .nvmrc という名前のファイルを配置して、そのディレクトリに移動して nvm use コマンドを実行しなければなりません。

nvm のドキュメントの Deeper Shell Integration にディレクトリに移動した際に自動的に nvm use コマンドを実行するスクリプトが掲載されています。

以下は bash 用のスクリプトです。※変更があるかもしれないので nvm のサイトで確認してください。

cdnvm() {
    command cd "$@";
    nvm_path=$(nvm_find_up .nvmrc | tr -d '\n')

    # If there are no .nvmrc file, use the default nvm version
    if [[ ! $nvm_path = *[^[:space:]]* ]]; then

        declare default_version;
        default_version=$(nvm version default);

        # If there is no default version, set it to `node`
        # This will use the latest version on your machine
        if [[ $default_version == "N/A" ]]; then
            nvm alias default node;
            default_version=$(nvm version default);
        fi

        # If the current version is not the default version, set it to use the default version
        if [[ $(nvm current) != "$default_version" ]]; then
            nvm use default;
        fi

    elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then
        declare nvm_version
        nvm_version=$(<"$nvm_path"/.nvmrc)

        declare locally_resolved_nvm_version
        # `nvm ls` will check all locally-available versions
        # If there are multiple matching versions, take the latest one
        # Remove the `->` and `*` characters and spaces
        # `locally_resolved_nvm_version` will be `N/A` if no local versions are found
        locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]')

        # If it is not already installed, install it
        # `nvm install` will implicitly use the newly-installed version
        if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then
            nvm install "$nvm_version";
        elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then
            nvm use "$nvm_version";
        fi
    fi
}
alias cd='cdnvm'
cd "$PWD"

使い方は vim などを使って上記スクリプトを .bashrc の最後に追加して、変更を反映するために source ~/.bash_profile コマンドを実行します。

//vim で .bashrc を編集
$ vi ~/.bashrc   return
//上記スクリプトを既存の内容の後に追加して保存

//変更を反映
$ source ~/.bash_profile  return

例えば、現在以下のバージョンがインストールされている場合、

$ nvm ls  return  //インストール済のバージョンを表示
       v12.22.9
       v14.17.6
->     v14.18.3
       v16.13.2
        v17.3.1
default -> 14.18.3 (-> v14.18.3)

$ nvm current  return  //現在利用しているバージョンを表示
v14.18.3

以下のように projectY と projectZ のディレクトリに .nvmrc を配置します。

nvm-sample
├── projectX
├── projectY
│   └── .nvmrc //16.13.2
└── projectZ
     └── .nvmrc  //17.3.1

cd コマンドでディレクトリを移動すると、自動的に Node.js のバージョンが切り替わります。

$ cd projectY  return  //projectY に移動
Now using node v16.13.2 (npm v8.1.2)  //自動的にバージョンが切り替わる

$ node -v  return  //Node.js のバージョンを表示
v16.13.2

$ cd ../projectZ  return  //projectZ に移動
Now using node v17.3.1 (npm v8.3.0)  //自動的にバージョンが切り替わる

$ node -v  return  //Node.js のバージョンを表示
v17.3.1

入力補完 Bash Completion

入力補完の機能もあり、コマンドの途中でタブキーを押して候補を表示することができます。

例えば nvm use と入力後 tab キーを押すと現在インストールされているバージョンやエイリアスの候補が表示され、以下の場合は nvm use v16 まで入力して tab キーを押すと nvm use v16.13.2 と補完されます。

$ nvm use tab //タブキーを押すと以下の候補が表示される
default      lts/argon    lts/dubnium  lts/gallium  unstable     v14.18.3
iojs         lts/boron    lts/erbium   node         v12.22.9     v16.13.2
lts/*        lts/carbon   lts/fermium  stable       v14.17.6     v17.3.1

$ nvm use v16 tab //タブキーを押すと 16.13.2 が補完される

nvm のアンインストール

nvm 自体をアンインストールするには $NVM_DIR ディレクトリを削除して、インストールの際に .bashrc に追記された内容を削除します。

$NVM_DIR ディレクトリはデフォルトでは $HOME/.nvm になります。

$ echo $NVM_DIR  return  //$NVM_DIR ディレクトリを確認
/Users/xxxx/.nvm

以下は rm コマンドで $NVM_DIR ディレクトリを削除する例です。 -f を指定しているので確認メッセージを表示せずに削除されます。

$ rm -rf "$NVM_DIR"  return //$NVM_DIR ディレクトリを削除

この例では bash を使用しているので .bashrc の以下の部分を削除します。

export NVM_DIR="$HOME/.nvm"
[ -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_completionn

自動的に nvm use を実行するスクリプトを追加している場合は、その部分も削除します。

//以下を追加してあれば削除
cdnvm() {
    command cd "$@";
    nvm_path=$(nvm_find_up .nvmrc | tr -d '\n')

    # If there are no .nvmrc file, use the default nvm version
    if [[ ! $nvm_path = *[^[:space:]]* ]]; then
	
    ・・・中略・・・
	
	if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then
            nvm install "$nvm_version";
        elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then
            nvm use "$nvm_version";
        fi
    fi
}
alias cd='cdnvm'
cd "$PWD"

参考:Uninstalling / Removal