nvm を使って Node.js を Mac にインストール
nvm(Node Version Manager)を Mac にインストールして Node.js の開発環境を構築し、任意の Node.js のバージョンを利用する方法についての解説(覚書)です。
nvm を使うと、複数の Node.js のバージョンをインストールして必要に応じて切り替えたり、プロジェクト毎に異なる Node.js のバージョンを使用することもできます。
作成日:2022年1月15日
使用している環境は以下になります。
- macOS のバージョン: 12.1 Monterey(Intel)→ 13.5.2 Ventura(Intel)
- デフォルトのシェル:bash → zsh
- nvm のバージョン: 0.39.1 → 0.39.5
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 を使用していますが、zsh シェルを使用している場合の設定についても記載しています。
bash を使用している場合で、.bash_profile があるかどうかは以下の ls -a コマンドで確認できます(この例では .bash_profile ファイルはすでに作成してあります)。
//ホームディレクトリの全てのファイル(隠しファイルを含む)をリスト表示 $ 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 コマンドラインツールを手動でインストールする必要があります。
Xcode コマンドラインツールがインストール済みかの確認
Xcode コマンドラインツールがすでにインストールされているかは、以下のコマンドを実行してパスが表示されればインストールされています。
$ xcode-select -p return // -print-path の短縮形 /Library/Developer/CommandLineTools // インストールされていればパスが出力されます
Xcode コマンドラインツールのインストール
Xcode コマンドラインツールがインストールされていない場合は、以下を実行するとポップアップウィンドウが表示されるので「インストール」をクリックしてインストールすることができます。
$ xcode-select --install return
環境設定ファイルの作成
環境設定ファイル(.bash_profile または .zshrc)が作成されていない場合は作成します。
bash シェルを使用している場合で、.bash_profile がまだ作成されていない場合は、以下のように touch コマンドを使って作成できます。
$ touch ~/.bash_profile return
zsh シェルを使用している場合で、.zshrc がまだ作成されていない場合は、以下のように touch コマンドを使って作成できます。
$ touch ~/.zshrc return
~/.bash_profile
以下はこの例の場合の .bash_profile です。.bashrc を読み込む設定を記述します。
if [ -f ~/.bashrc ]; then . ~/.bashrc fi
関連項目:~/.bashrc と ~/.bash_profile の作成
nvm をインストール
nvm をインストールするにはインストールスクリプトを実行する必要があり、以下の cURL または Wget コマンドを実行するか、ダウンロードして手動でインストールします。
実際にインストールする際は nvm のページで最新のコマンドを確認します。以下のコマンドは v0.39.1 をインストールします。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
以下は cURL コマンドを使って nvm をインストールする例です。
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/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 の場合)また、以下を実行してシェルを再起動しても変更を反映させることができます。
% exec $SHELL -l // シェルを再起動
~/.bashrc
.bashrc を確認すると以下のように既存の設定の後に nvm の設定が追加されています(3〜5行目)。
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
デフォルトで bash シェルを使用していて、zsh でも nvm を使用する場合は ~/.zshrc にも nvm の設定を追加し、source ~/.zshrc を実行します。
上記の ~/.bashrc に追加された設定と同じ内容です。nvm のドキュメントの Manual Install の「Now add these lines to your ~/.bashrc, ~/.profile, or ~/.zshrc ・・・」以下に記載されています。
※ zsh をデフォルトで使用している場合は、~/.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 // または nvm -v 0.39.1
nvm をアップデート
nvm を更新するには、インストールと同様、その時の最新のインストールスクリプトを実行します。
以下は cURL コマンドを使って nvm を最新版(v0.39.5)にアップデートする例です。
実際に使用する最新のコマンドは Installing and Updating で確認してください。
% curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash return % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15916 100 15916 0 0 50898 0 --:--:-- --:--:-- --:--:-- 51341 => nvm is already installed in /Users/username/.nvm, trying to update using git => => Compressing and cleaning up git repository => nvm source string already in /Users/username/.zshrc => bash_completion source string already in /Users/username/.zshrc => 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 --version return // バージョンを確認(再起動しないと反映されない) 0.39.3 % exec $SHELL -ln return // シェルを再起動 % nvm --version return // 更新されている 0.39.5
cURL コマンド(インストールスクリプト)が終了したら、ターミナルを再起動するかシェルを再起動する必要があります。
また、その後、再度 Node.js をインストールしないと、PC を再起動して node コマンドを実行すると command not found: node(node コマンドが見つからない)というエラーになってしまいました。
Node.js のインストールを実行
インストールスクリプトを使ってアップデートした場合、Node.js のインストールを実行します。
以下は最新の LTS(Long Term Support)バージョンの Node.js をインストールする例です(use や alias default については後述)。
% nvm install --lts return // 最新の LTS の Node.js をインストール Installing latest LTS version. Downloading and installing node v18.17.1... Downloading https://nodejs.org/dist/v18.17.1/node-v18.17.1-darwin-x64.tar.xz... ############################################################################################# 100.0% Computing checksum with shasum -a 256 Checksums matched! Now using node v18.17.1 (npm v9.6.7) % node -v return// バージョンの確認 v18.17.1 % nvm ls return// インストール済のバージョンを表示 v18.13.0 -> v18.17.1 v20.6.1 default -> lts/* (-> v18.17.1) */ iojs -> N/A (default) unstable -> N/A (default) node -> stable (-> v20.6.1) (default) stable -> 20.6 (-> v20.6.1) (default) lts/* -> lts/hydrogen (-> v18.17.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.3 (-> N/A) lts/gallium -> v16.20.2 (-> N/A) lts/hydrogen -> v18.17.1 % nvm use 20.6.1 return // バージョン 20.6.1 に切り替え Now using node v20.6.1 (npm v10.1.0) % nvm alias default v20.6.1 return // デフォルトをバージョン 20.6.1 に変更 default -> v20.6.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
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"