nvm

nvm(Node Version Manager)是 Node.js 的版本管理工具,支持在同一台机器上安装和切换多个 Node.js 版本。适合同时维护多个项目(不同项目要求不同 Node 版本)或尝鲜新版本的场景。

Windows 上使用 nvm-windows(独立项目,命令相同);macOS / Linux 使用原版 nvm。


安装

macOS / Linux

# 官方安装脚本(替换为最新版本号)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
 
# 或通过 wget
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

安装脚本会自动在 ~/.bashrc / ~/.zshrc / ~/.profile 中追加以下配置:

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

重启终端或执行 source ~/.zshrc 使配置生效。

Windows(nvm-windows)

nvm-windows releases 下载 nvm-setup.exe 安装,安装时选择 nvm 目录和 Node 安装目录(建议路径不含空格和中文)。


核心命令

安装 Node.js

# 安装最新 LTS 版本(生产环境推荐)
nvm install --lts
nvm install lts/iron        # 安装指定 LTS 代号
 
# 安装指定版本
nvm install 22              # 安装 22.x 最新补丁
nvm install 22.4.0          # 安装精确版本
nvm install 18.20.3
 
# 列出所有可安装的版本
nvm ls-remote               # 所有版本
nvm ls-remote --lts         # 只看 LTS 版本

切换版本

# 切换(仅当前 Shell 会话生效)
nvm use 22
nvm use 18
nvm use --lts
 
# 设置默认版本(新开 Shell 自动使用)
nvm alias default 22
nvm alias default lts/iron
 
# 查看当前使用的版本
nvm current
node --version

查看已安装版本

nvm ls                  # 列出本地所有已安装版本(标注当前和默认)

输出示例:

       v18.20.3
->     v22.4.0          # → 当前使用
default -> 22 (-> v22.4.0)
lts/* -> lts/iron (-> v22.4.0)

卸载版本

nvm uninstall 18.20.3

.nvmrc — 项目级版本锁定

在项目根目录创建 .nvmrc 文件,声明项目所需的 Node 版本:

# .nvmrc
22

或精确版本:

22.4.0

进入项目目录后执行 nvm use,自动读取 .nvmrc 切换到对应版本:

cd my-project
nvm use           # 自动读取 .nvmrc,切换到 v22

自动切换(推荐)

~/.zshrc~/.bashrc 添加以下函数,进入目录时自动切换:

# 自动读取 .nvmrc 切换 Node 版本
autoload -U add-zsh-hook
load-nvmrc() {
  local nvmrc_path
  nvmrc_path="$(nvm_find_nvmrc)"
  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version
    nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
      nvm use
    fi
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

别名管理

# 创建自定义别名
nvm alias my-lts 22.4.0
 
# 使用别名
nvm use my-lts
 
# 删除别名
nvm unalias my-lts
 
# 查看所有别名
nvm alias

内置别名:default(新 Shell 默认版本)、lts/*(最新 LTS)、node(最新版)。


全局包管理

不同 Node 版本的全局包相互独立,切换版本后需重新安装全局工具:

# 查看当前版本已安装的全局包
npm list -g --depth=0
 
# 从另一个版本迁移全局包(切换后执行)
nvm reinstall-packages 18    # 将 v18 的全局包安装到当前版本

常用全局工具建议通过 npx 按需执行(无需安装),避免全局包版本混乱:

npx create-react-app my-app
npx tsc --init

镜像加速(国内)

# 设置 Node.js 下载镜像(安装前设置)
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
 
# 永久生效(写入 ~/.zshrc)
echo 'export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/' >> ~/.zshrc

常见问题

nvm: command not found

终端未加载 nvm 初始化脚本,检查 ~/.zshrc~/.bashrc 中是否有 nvm 的 source 行,执行 source ~/.zshrc 重新加载。

切换版本后 node 命令找不到

nvm use 22
which node          # 应指向 ~/.nvm/versions/node/v22.x.x/bin/node

若仍指向系统 Node(/usr/local/bin/node),说明 PATH 顺序有问题,确保 ~/.nvm/*/bin 在系统 PATH 之前。

Windows 路径含空格导致安装失败

nvm-windows 的安装目录和 Node 安装目录均不能包含空格,建议分别设为 C:\nvmC:\nodejs


相关链接

  • Node — Node.js 运行时基础与核心模块
  • npm — Node.js 默认包管理器
  • yarn — 替代包管理器
  • pnpm — 高效包管理器