NVM 安装与使用
本篇记录如何在 Linux、macOS、Windows 安装并使用 NVM(Node Version Manager)。
这次采用的方式不是手动写死某个 nvm 版本,而是:先在执行时动态获取 nvm-sh/nvm 当前最新 release tag,再用这个 tag 下载对应的安装脚本。
官方仓库:
https://github.com/nvm-sh/nvm
1. Linux / macOS 安装 nvm(动态获取最新版本)
如果你希望每次执行安装命令时,都自动取当前最新版本,可以这样写。
1.1 使用 curl 动态获取最新版本并安装
export version="$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest | awk -F '"' '/tag_name/ {print $4; exit}')"
curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${version}/install.sh" | bash
1.2 一行写法
export version="$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest | awk -F '"' '/tag_name/ {print $4; exit}')" && curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${version}/install.sh" | bash
1.3 如果你喜欢和你示例接近的写法
export version="$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest | awk -F '"' '/tag_name/ {print $4; exit}')"
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/${version}/install.sh | bash
这几种写法的核心区别不大,重点是前面这句:
export version="$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest | awk -F '"' '/tag_name/ {print $4; exit}')"
它会在执行当下请求 GitHub API,并提取当前最新 release 的 tag_name,例如:
v0.40.4v0.40.5- 未来更新后的新版本号
你可以先单独验证一下:
export version="$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest | awk -F '"' '/tag_name/ {print $4; exit}')"
echo "$version"
如果成功输出类似 v0.40.4,再执行安装命令即可。
2. 如果安装后当前终端还不能直接用 nvm
安装脚本通常会自动把初始化逻辑写入你的 shell 配置文件,但当前终端会话不一定立刻生效。
手动加载:
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
或者重新加载 shell 配置:
source ~/.bashrc 2>/dev/null || true
source ~/.bash_profile 2>/dev/null || true
source ~/.zshrc 2>/dev/null || true
source ~/.profile 2>/dev/null || true
3. 验证安装
nvm --version
command -v nvm
如果能正常输出版本号,并且 command -v nvm 有结果,说明安装成功。
4. 安装并使用 Node.js
4.1 安装最新稳定版 Node.js
nvm install node
4.2 安装最新 LTS 版本
nvm install --lts
4.3 切换版本
nvm use node
或:
nvm use --lts
4.4 查看当前版本
nvm current
node -v
npm -v
5. 设置默认 Node.js 版本
5.1 默认使用最新稳定版
nvm alias default node
5.2 默认使用最新 LTS 版本
nvm alias default lts/*
查看别名:
nvm alias
6. 常用命令速查
6.1 查看本地已安装版本
nvm ls
6.2 查看远程可安装版本
nvm ls-remote
查看 LTS:
nvm ls-remote --lts
6.3 安装指定版本
nvm install 22.22.1
6.4 使用指定版本
nvm use 22.22.1
6.5 卸载某个版本
nvm uninstall 22.22.1
7. 项目级版本管理(推荐)
如果项目根目录里有 .nvmrc 文件,团队成员进入项目后就能统一 Node.js 版本。
7.1 写入版本
echo "22.22.1" > .nvmrc
7.2 按项目版本安装 / 切换
nvm install
nvm use
8. 国内网络场景建议
如果下载 Node.js 较慢,可以切换镜像:
export NVM_NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"
如果希望长期生效,可以写入:
~/.bashrc~/.zshrc
然后重新加载:
source ~/.bashrc 2>/dev/null || true
source ~/.zshrc 2>/dev/null || true
9. Windows 怎么办?
Windows 原生环境通常使用的是 nvm-windows,它和 nvm-sh/nvm 不是同一个实现。
如果你是:
- WSL / Linux 子系统:直接用本文方式安装
nvm - Windows PowerShell / CMD 原生环境:建议使用
nvm-windows
仓库地址:
https://github.com/coreybutler/nvm-windows
安装后常见命令类似:
nvm install 22.22.1
nvm use 22.22.1
node -v
npm -v
10. 常见问题
10.1 nvm: command not found
通常是 shell 配置还没有生效,执行:
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
然后再执行:
nvm --version
10.2 动态获取最新版本失败
先单独检查:
curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest
如果这里失败,通常是:
- 网络访问 GitHub 有问题
- 公司网络/代理限制
- GitHub API 临时不可用
你也可以只检查提取后的版本值:
export version="$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest | awk -F '"' '/tag_name/ {print $4; exit}')"
echo "$version"
如果为空,说明没成功拿到 tag。
10.3 GitHub API 有速率限制吗?
有。未认证访问 GitHub API 会有匿名请求频率限制。
不过对于“偶尔手工安装一次 nvm”这种场景,通常完全够用。只有在频繁自动化批量调用时,才需要考虑认证或缓存。
10.4 切换版本后 node -v 没变化
检查当前 node 是否来自 ~/.nvm:
which node
which npm
如果不是,说明系统里可能还有其他 Node.js 安装(例如 Homebrew / apt / yum / 官方安装包),PATH 优先级更高。
11. 推荐使用方式
11.1 开发机初始化
export version="$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest | awk -F '"' '/tag_name/ {print $4; exit}')"
curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/${version}/install.sh" | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
nvm install --lts
nvm alias default lts/*
11.2 进入项目后
nvm install
nvm use
11.3 查看当前环境
nvm current
node -v
npm -v
12. 总结
如果你的目标是:
- 安装
nvm时不手动维护版本号 - 每次执行安装命令都尽量拿到当前最新 release
- 后续仍然用
nvm install --lts/.nvmrc管理 Node 版本
那么“先动态获取 release tag,再下载 install.sh”就是一个比较符合你习惯的写法。
你现在偏好的写法,本质上可以固定为:
export version="$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest | awk -F '"' '/tag_name/ {print $4; exit}')"
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/${version}/install.sh | bash
这样每次运行时,${version} 都会先去取“当前时刻 GitHub 上的最新 nvm release tag”,不需要你手工维护版本号。