NVM 入门指南(Node Version Manager)

NVM 是一款命令行工具,用于帮助你在同一个系统上管理和切换多个版本的 Node.js。


目录


NVM 的作用

在不使用 NVM 的情况下,一个系统通常只能安装一个 Node.js 版本,容易造成以下问题:

问题场景 使用 NVM 的好处
不同项目需要不同版本的 Node.js 可以快速切换所需版本
系统级安装 Node.js 需要 sudo,导致权限问题 NVM 将 Node 安装在用户目录,可避免权限冲突
升级 Node.js 不便 任意安装、删除和切换版本,不影响系统环境

安装 NVM

macOS / Linux

执行官方安装脚本:

1
2
3
4
5
# 使用 curl
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

安装完成后,重新打开终端或执行以下命令使 NVM 生效:

1
2
3
4
5
source ~/.bashrc
# 或
source ~/.zshrc
# 或
source ~/.bash_profile

Windows 用户说明

NVM 原项目不支持 Windows。若在 Windows 上使用,请安装独立维护项目 nvm-windows(命令略有不同)。


基本命令

查看和安装版本

命令 说明 示例
nvm ls-remote 查看所有可安装的 Node.js 版本 nvm ls-remote
nvm ls-remote –lts 查看所有长期支持 (LTS) 版本 nvm ls-remote –lts
nvm install <version> 安装指定版本 nvm install 20.11.1
nvm install –lts 安装最新 LTS 版本 nvm install –lts

切换版本

命令 说明 示例
nvm ls 查看本地已安装的版本 nvm ls
nvm use <version> 切换 Node 版本(仅当前会话) nvm use 20.11.1
nvm use system 切回系统默认安装的 Node.js nvm use system
nvm current 查看当前所用版本 nvm current

设置默认版本

命令 说明 示例
nvm alias default <version> 设置默认 Node.js 版本 nvm alias default 20.11.1
nvm deactivate 临时停用 NVM nvm deactivate

项目级 Node 版本管理(.nvmrc)

在项目根目录创建 .nvmrc 文件,并写入所需 Node.js 版本:

1
echo "18.20.0" > .nvmrc

进入该目录后执行:

1
nvm use

NVM 会自动读取 .nvmrc 并切换版本。


常见问题

1. 安装后提示 command not found: nvm

原因:shell 配置文件未加载 NVM 初始化脚本。

解决方法:执行以下任意一条(视你使用的 shell 而定):

1
2
3
source ~/.bashrc
source ~/.zshrc
source ~/.bash_profile

或关闭终端重新打开。


附录:自动读取 .nvmrc(可选优化)

如果希望每次切换目录时自动应用 .nvmrc 中的版本,可将以下代码加入 ~/.zshrc

1
2
3
4
5
6
7
8
9
10
11
12
13
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local required_version=$(cat "$nvmrc_path")
local current_version=$(nvm current)
if [ "$current_version" != "v$required_version" ]; then
nvm use
fi
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

此方式可在项目切换时自动使用正确的 Node.js 版本。


完成

至此,我们已经掌握:

  • 如何安装 NVM
  • 如何切换 Node.js 版本
  • 如何为项目指定 Node.js 版本
    希望该教程能帮到你。