OpenSource-Hub

nvm

CLI ツール

nvm-sh/nvm

複数の Node.js バージョンを管理するための POSIX 準拠のシェルスクリプト。

概要

nvm は Node.js のバージョンマネージャーであり、コマンドラインで複数のアクティブなバージョンを素早くインストール・切り替えることができます。bash、zsh、ksh、sh などの POSIX 準拠シェルをサポートし、Unix、macOS、Windows WSL に対応しています。.nvmrc ファイルによるプロジェクトレベルのバージョン管理をサポートし、オフラインインストールやミラーのカスタマイズなどの機能も提供します。

README プレビュー

\n  \n    \n    \n  \n\n\n\n# Node Version Manager [][3] [][4] [](https://bestpractices.dev/projects/684)\n\n\n\n\n## Table of Contents\n\n- [Intro](#intro)\n- [About](#about)\n- [Installing and Updating](#installing-and-updating)\n  - [Install & Update Script](#install--update-script)\n    - [Additional Notes](#additional-notes)\n    - [Installing in Docker](#installing-in-docker)\n      - [Installing in Docker for CICD-Jobs](#installing-in-docker-for-cicd-jobs)\n    - [Troubleshooting on Linux](#troubleshooting-on-linux)\n    - [Troubleshooting on macOS](#troubleshooting-on-macos)\n    - [Ansible](#ansible)\n  - [Verify Installation](#verify-installation)\n  - [Important Notes](#important-notes)\n  - [Git Install](#git-install)\n  - [Manual Install](#manual-install)\n  - [Manual Upgrade](#manual-upgrade)\n- [Usage](#usage)\n  - [Long-term Support](#long-term-support)\n  - [Migrating Global Packages While Installing](#migrating-global-packages-while-installing)\n  - [Migrating Global Packages Between Installed Versions](#migrating-global-packages-between-installed-versions)\n  - [Offline Install](#offline-install)\n  - [Default Global Packages From File While Installing](#default-global-packages-from-file-while-installing)\n  - [io.js](#iojs)\n  - [System Version of Node](#system-version-of-node)\n  - [Listing Versions](#listing-versions)\n  - [Setting Custom Colors](#setting-custom-colors)\n    - [Persisting custom colors](#persisting-custom-colors)\n    - [Suppressing colorized output](#suppressing-colorized-output)\n  - [Restoring PATH](#restoring-path)\n  - [Set default node version](#set-default-node-version)\n  - [Use a mirror of node binaries](#use-a-mirror-of-node-binaries)\n    - [Pass Authorization header to mirror](#pass-authorization-header-to-mirror)\n  - [.nvmrc](#nvmrc)\n  - [Deeper Shell Integration](#deeper-shell-integration)\n    - [Calling `nvm use` automatically in a directory with a `.nvmrc` file](#calling-nvm-use-automatically-in-a-directory-w

FAQ (5)

トラブル対応
zsh で nvm.sh を source した際に発生する nvm エラー "cdhist: error: unrecognized arguments: -q" を修正する方法

この問題は、cdhist によるユーザー定義の cd シェル関数が zsh 組み込みの cd をシャドウしているために発生します。nvm は zsh で cd -q を実行しますが、cdhist は -q フラグに対応していないため、NVM_DIR が / になってしまいます。

ユーザー定義の cd 関数をバイパスしてシェルの組み込みコマンドを直接呼び出す nvm_cd の修正を含むリリースに nvm をアップグレードしてください。

即時パッチ: ~/.nvm/nvm.sh を開き、nvm_cd() を見つけて、次のように変更してください:

nvm_cd() {
  if nvm_is_zsh; then
    builtin cd "$@"
  else
    command cd "$@"
  fi
}

続いて再読み込みします:

source ~/.nvm/nvm.sh

現在のシェルのみに有効な一時的な回避策:

unset -f cd
source ~/.nvm/nvm.sh

これにより、シェルが再起動されるまで cdhist の cd 関数が無効になります。

参照 Issue #3835
トラブル対応
nvmのインストールスクリプトが~/.bashrcの最後の行にbash_completionを追記してしまう問題を修正するにはどうすればよいですか?

これは nvm v0.40.8 のインストーラーにおいて、~/.bashrc の末尾に改行がなく、すでに nvm.sh に一致する行が含まれている場合に発生します。補完行が新しい行として開始されずに追記されてしまいます。修復するには、~/.bashrc を開き、nvm の補完スニペットを独立した行に移動してください。

[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

インストーラーを再実行する前に、ファイルが改行で終わっていることを確認してください。

[ -n "$(tail -c1 ~/.bashrc)" ] && printf '\n' >> ~/.bashrc

その後、最新の nvm インストーラーを再実行してください。最新版には、改行で終わっていないプロファイルに追記する前に改行を書き込む修正が含まれています。

参照 Issue #3951
トラブル対応
macOSで別途Node.jsがインストールされていない場合に、nvmの「not compatible with the npm config prefix option」エラーを修正するにはどうすればよいですか?

これは、macOSがホームディレクトリのパスを、実際のフォルダーとは異なる大文字小文字で報告した場合に発生することがあり、多くはTime Machineからの復元やアカウント移行の後に起こります。たとえば、$HOME が /Users/mitch であるのに、フォルダーは /Users/Mitch になっているような場合です。次のコマンドでパスを比較してください:

echo "$HOME"
whoami
ls -ld /Users/*

大文字小文字が異なる場合は、ホームディレクトリのパスを修正します:

1. Macをバックアップし、問題のあるアカウントからログアウトします。
2. **システム環境設定 → ユーザとグループ** を開きます。
3. 自分のユーザーを右クリックし、**詳細オプション** を選択します。
4. **ホームディレクトリ** に、/Users/Mitch のような実際の大文字表記のパスを設定します。
5. 保存してMacを再起動し、Terminalを開き直します。
6. それでもnvmがインストール済みバージョンのプレフィックスを報告する場合は、次を実行します:

nvm use --delete-prefix v14.5.0

v14.5.0 は、nvmでインストールしたNodeのバージョンに置き換えてください。nvmを更新すると、このケースに対する改善された警告が表示される場合もあります。この検出処理は nvm PR #2263 で対応されました。

参照 Issue #2261
トラブル対応
nvm が zsh の起動を遅くしているのはなぜですか?また、その遅延を減らすにはどうすればよいですか?

この遅延は主に、nvm.sh が読み込まれる際に nvm が自動的に nvm use default を実行することが原因です。--no-use を付けて nvm を読み込むことで、そのバージョン選択を遅延させることができます。

~/.zshrc で、次の行を:

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

以下のように置き換えます:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" --no-use
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"

シェルを再起動します:

exec zsh

この issue のベンチマークでは、通常の読み込みには約 303 ms かかっていたのに対し、--no-use を使うとシェルの起動時間は約 75 ms に短縮されました。nvm 自体の読み込みには約 44 ms かかり、残りの時間はデフォルトバージョンの自動選択に費やされていました。

--no-use を使う場合、Node が必要になったときに次のコマンドを実行してください:

nvm use default

あるいは、nvm、node、npm、npx のいずれかが最初に呼び出されたときにのみ nvm を遅延読み込みすることもできます:

export NVM_DIR="$HOME/.nvm"

_lazy_load_nvm() {
  unset -f nvm node npm npx
  [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
  [ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"
}

nvm() { _lazy_load_nvm; nvm "$@"; }
node() { _lazy_load_nvm; node "$@"; }
npm() { _lazy_load_nvm; npm "$@"; }
npx() { _lazy_load_nvm; npx "$@"; }

起動時間の計測には次を実行します:

hyperfine --warmup 3 'zsh -i -c exit'

参照 Issue #3930
トラブル対応
Windows ホストに Node.js/npm がインストールされていると、WSL での nvm のインストールが失敗するのはなぜですか?

**原因:** nvm のインストールスクリプトは(nvm_check_global_modules 経由で)npm を呼び出します。WSL ではデフォルトで Windows のパスが $PATH に追加されるため、npm が /mnt/c/Program Files/nodejs/npm に解決されることがあります。これは Windows 版 Node.js のインストールに同梱されているシェルスクリプトで、Windows の node.exe を実行します。このためインストールが失敗します。

**回避策 1 — Windows の PATH が WSL に混入しないようにする(推奨):**
1. WSL 内で /etc/wsl.conf を作成/編集します:

[interop]
   appendWindowsPath = false

2. Windows 上の PowerShell から wsl --shutdown を実行し、WSL ターミナルを開き直します。
3. nvm のインストールスクリプトを再実行します。

**回避策 2 — インストール時のみ Windows のパスを一時的に除外する:**

PATH=$(echo "$PATH" | tr ':' '\n' | grep -v '^/mnt/c' | paste -sd: -)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

which npm で確認してください — /mnt/c/... を指していないはずです。nvm 自体の修正(npm の隣に Windows の node.exe が存在する場合に npm のチェックをスキップする)が提案されているため、リリース後に nvm をアップグレードすることでも解決する可能性があります。

参照 Issue #3700