Skip to content

nvm 常用命令

nvm(Node Version Manager)是 Node.js 的版本管理工具,可以在同一台机器上安装和切换多个 Node.js 版本。不同系统有不同的实现。


安装

macOS / Linux(nvm)

bash
# 安装 nvm(访问 https://github.com/nvm-sh/nvm 查看最新版本)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

# 或使用 wget
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

# 安装后重启终端,或执行以下命令
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

# 验证安装
nvm --version

Windows(nvm-windows)

bash
# 下载安装包
# https://github.com/coreybutler/nvm-windows/releases

# 安装后验证
nvm version

⚠️ nvm 和 nvm-windows 是两个不同的项目,部分命令有差异。


常用命令

查看版本

bash
# 查看 nvm 版本
nvm --version

# 查看当前 Node 版本
node -v

# 查看当前 npm 版本
npm -v

# 查看已安装的 Node 版本
nvm ls
nvm list

# 查看当前使用的版本
nvm current

# 查看可安装的远程版本(仅 macOS/Linux)
nvm ls-remote
nvm ls-remote --lts  # 只看 LTS 版本(Long Term Support,长期支持版,稳定性高、维护周期长,适合生产环境)

安装 & 切换版本

bash
# 安装最新版本
nvm install node

# 安装指定版本
nvm install 18
nvm install 18.17.0

# 安装最新 LTS 版本
nvm install --lts
nvm install lts/*

# 安装指定 LTS 代号
nvm install lts/hydrogen   # Node.js 18.x
nvm install lts/iron       # Node.js 20.x

# 切换到指定版本
nvm use 18
nvm use 18.17.0

# 切换到最新 LTS
nvm use --lts
nvm use lts/*

# 切换到系统版本
nvm use system

设置默认版本

bash
# 设置默认 Node 版本(新终端自动使用)
nvm alias default 18
nvm alias default lts/*

# 查看当前默认版本
nvm alias default

# 查看所有别名
nvm alias

⚠️ nvm-windows 1.1.12 及以上版本已支持 nvm alias 命令。旧版本使用 nvm default 18 设置默认版本。

卸载版本

bash
# 卸载指定版本
nvm uninstall 18
nvm uninstall 18.17.0

# 不能卸载当前使用的版本
# 先切换到其他版本再卸载
nvm use 20
nvm uninstall 18

⚠️ nvm use 切换后只在当前终端会话生效,新开窗口会使用 default 版本。

运行指定版本

bash
# 用指定版本运行脚本(不切换当前版本)
nvm run 18 app.js
nvm run 18.17.0 app.js

# 用指定版本执行命令
nvm exec 18 node -v
nvm exec 18 npm install

# 查看指定版本的安装路径
nvm which 18
nvm which 18.17.0

.nvmrc 文件(项目级 Node 版本锁定)

在项目根目录创建 .nvmrc 文件,指定该项目使用的 Node 版本:

bash
# .nvmrc
18

或指定完整版本:

bash
# .nvmrc
18.17.0

团队成员进入项目目录后,执行:

bash
# 自动安装并切换到 .nvmrc 指定的版本
nvm install

# 仅切换(已安装的情况)
nvm use

自动切换(配置 shell)

配置终端自动读取 .nvmrc 并切换版本:

bash
# 在 ~/.bashrc 或 ~/.zshrc 中添加
# 进入目录时自动切换
cd() {
  builtin cd "$@"
  if [[ -f .nvmrc ]]; then
    nvm use
  fi
}

💡 建议将 .nvmrc 提交到 Git,确保团队成员使用相同的 Node 版本。

.node-version 文件

部分工具(如 Volta、asdf)也支持 .node-version 文件:

bash
# .node-version
18.17.0

nvm 从 0.39.0 开始支持 .node-version 文件。


镜像加速

bash
# 设置 Node 镜像源(淘宝)— 仅 macOS/Linux 版 nvm
nvm node_mirror https://npmmirror.com/mirrors/node/

# 设置 npm 镜像源 — 仅 macOS/Linux 版 nvm
nvm npm_mirror https://npmmirror.com/mirrors/npm/

⚠️ nvm-windows 不支持 nvm node_mirror,需手动编辑安装目录下的 settings.txt

node_mirror: https://npmmirror.com/mirrors/node/
npm_mirror: https://npmmirror.com/mirrors/npm/

重新安装全局包

bash
# 安装新版本时,自动从之前版本复制全局包
nvm install 20 --reinstall-packages-from=18

# 手动重新安装全局包
nvm use 20
npm install -g <package>

常用工作流

多项目维护

bash
# 项目 A 使用 Node 16
cd ~/projects/project-a
nvm use 16

# 项目 B 使用 Node 18
cd ~/projects/project-b
nvm use 18

测试不同版本兼容性

bash
# 安装多个版本
nvm install 16
nvm install 18
nvm install 20

# 逐个测试
nvm use 16 && node test.js
nvm use 18 && node test.js
nvm use 20 && node test.js

清理旧版本

bash
# 查看已安装版本
nvm ls

# 卸载不再需要的版本
nvm uninstall 14
nvm uninstall 16

升级到最新 LTS

bash
# 查看当前 LTS 版本
nvm ls-remote --lts | tail -1

# 安装最新 LTS
nvm install --lts

# 切换到最新 LTS
nvm use --lts

# 设置为默认
nvm alias default lts/*

nvm 与其他版本管理工具

工具系统特点
nvmmacOS/Linux最常用,shell 实现
nvm-windowsWindows独立项目,部分命令不同
fnm全平台Rust 实现,速度更快
Volta全平台自动切换,项目级锁定
asdf全平台通用版本管理(不限于 Node)

常见问题

nvm use 报错:exit status 1

Windows 下需要以管理员权限运行终端,或者检查 settings.txt 中的路径配置。

切换版本后 npm 全局包丢失

bash
# 每个 Node 版本有独立的全局包目录
# 安装新版本时复制旧版本的全局包
nvm install 20 --reinstall-packages-from=18

nvm 命令找不到

bash
# 检查 nvm 是否正确加载
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

# 添加到 shell 配置文件
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc
source ~/.bashrc

node 版本正确但 npm 版本不对

bash
# 每个 Node 版本自带特定版本的 npm
# 更新当前版本的 npm
nvm install-latest-npm

Windows 下路径问题

bash
# 检查 settings.txt 中的路径
# 通常在 C:\Users\<user>\AppData\Roaming\nvm\settings.txt

# 确保路径没有中文或空格
# 如果有,修改 settings.txt 中的 path 配置

参考

个人学习笔记,部分内容借助 AI 辅助整理,仅供查阅参考,请以官方文档为准