nvm 安装与 Node.js 版本管理
本文使用 nvm-sh/nvm,适用于 macOS、Linux 和 WSL 的 Bash / zsh 等受支持 shell。原生 Windows 的 nvm-windows 是另一个项目;fish 也不能直接加载本文的 nvm 脚本。
nvm 与 n 的区别
nvm 按用户安装,并在每个 shell 会话中加载,通过调整当前会话 PATH 选择 Node.js。n 使用另一套安装和切换机制,不应同时混用多个版本管理器。全局 npm 包的实际位置取决于当前 Node 安装和 npm prefix,不能统一假定为 /usr/local/lib/node_modules。
检查已有的全局 Node/npm
安装 nvm 前先确认现有命令来源:
bash
command -v node
command -v npm
node --version
npm prefix -g未安装时出现“command not found”即可。系统 Node 不一定要先卸载;若决定移除,应按原安装渠道操作,并确认没有其他工具依赖它。例如只有确认为 Homebrew 安装时,才考虑 brew uninstall node。
不要批量删除 /usr/local、/opt/local 下所有带 node 的文件,也不必为安装 nvm 清空 npm 缓存。已有 ~/.npmrc 若设置了自定义 prefix,需按 nvm 的兼容性说明处理,否则可能把全局包装到错误目录。
安装 nvm
截至 2026-10-24,官方 README 使用 v0.40.8。下载固定版本脚本,阅读后再运行:
bash
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.8/install.sh -o nvm-install.sh
less nvm-install.sh
bash nvm-install.sh安装器会尝试在 shell 启动文件中添加初始化内容。重新打开终端;若当前会话仍找不到 nvm,可按实际安装目录加载(下例适用于官方默认目录规则):
bash
export NVM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/nvm"
if [ -z "${XDG_CONFIG_HOME-}" ]; then
export NVM_DIR="$HOME/.nvm"
fi
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
command -v nvm
nvm --versioncommand -v nvm 应输出 nvm。它是 shell 函数,不能用 which nvm 是否找到二进制来判断安装成功。若要持久生效,确认上述初始化已在当前 shell 的启动文件中,例如 zsh 的 ~/.zshrc,不要重复添加。
Homebrew 安装方式不受 nvm 上游支持;遇到该渠道的安装问题,应先按上游说明迁移,再排查版本切换。
安装多个 Node/npm 版本
新项目可先查看可用 LTS,并安装当前 LTS:
bash
nvm ls-remote --lts
nvm install --lts
node --version
npm --version项目要求特定版本时,以项目声明为准,例如 nvm install 22 安装该主版本下可用的版本,nvm install 24 安装另一主版本。选择版本前同时核对项目兼容性与 Node.js 支持周期。
在不同版本间切换
bash
nvm use 22
node --version
nvm use 24
node --version上述两个版本需要先安装。使用已安装的最新 LTS 可执行 nvm use --lts;希望新终端默认使用某个已安装版本时,可设置 nvm alias default 24。nvm use node 的 node 是版本别名,不等于“当前 LTS”。
列出已安装实例
bash
nvm ls
nvm current列表可以查看已安装版本和别名,current 显示当前会话使用的版本。
在项目中使用不同版本的 Node
项目已有 .nvmrc 时,在项目目录执行:
bash
nvm install
nvm use
node --versionnvm 会读取 .nvmrc。项目尚未锁定版本时,可在确认当前版本就是所需版本后记录它:
bash
node --version > .nvmrc这会覆盖现有文件,因此不要在已有 .nvmrc 的项目中盲目执行。固定完整版本有助于复现;仅安装 nvm 不会自动在每次 cd 时切换版本,自动切换需要额外的 shell 集成。
在多环境中使用 npm
各 Node 版本通常带有各自的 npm,全局包默认位于该 nvm 版本目录;可用 npm prefix -g 查看当前路径。nvm 的用户目录安装不需要 sudo npm install -g。
若已安装 Node 22,准备安装 Node 24 并迁移其全局包,可执行:
bash
nvm install 24 --reinstall-packages-from=22
npm ls -g --depth=0迁移全局包不等于迁移项目依赖,也不保证旧包兼容新 Node。项目依赖仍应按项目使用的包管理器和锁文件安装,并运行项目自己的验证。