什么是 nvm?
nvm 是一个 bash/zsh shell 脚本 ,允许你在同一台机器上安装并管理多个 Node.js 版本,并按需切换。
GitHub 地址:github.com/nvm-sh/nvm
⚠️ nvm 的限制与注意事项
1. 只能在类 Unix 系统下使用
✅ 支持:
- macOS
- Linux
- WSL (Windows Subsystem for Linux)
❌ 不支持原生 Windows CMD / PowerShell
如果你在 Windows 上想用
nvm,建议使用 WSL2 或者使用nvm-windows(另一个项目)。
2. 不是全局安装的程序
nvm 是一个 shell 函数,而不是独立的可执行文件。
这意味着:
- 它必须在你的 shell 配置文件中加载(如
.bashrc,.zshrc,.bash_profile等) - 某些终端模拟器或 IDE 内置终端可能没有正确加载
nvm - 在脚本中调用
nvm use或node可能会失败,除非确保环境已加载nvm
解决方案:
确保每次打开新终端时都加载了 nvm,可以通过以下方式检查:
type nvm
如果输出为 function,说明加载成功。
3. 不能通过 sudo 使用
因为 nvm 是用户级别的工具,它安装的 Node.js 也在当前用户的目录下(通常是 ~/.nvm/versions/node/)。
所以:
sudo node app.js
可能会出错,因为它找不到用户安装的 Node。
解决方法:
- 不要用
sudo运行本地 Node 程序。 - 如果你需要全局安装某些包,请先设置好权限或使用
npx。
4. 安装 Node.js 是从网络下载二进制文件
nvm install xx.x.x 会从官方源下载对应平台的 Node.js 二进制文件。
这意味着:
- 需要良好的网络连接
- 国内用户可能会遇到下载慢的问题(可以考虑配置镜像)
配置国内镜像(如淘宝镜像):
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
或者安装时指定:
nvm install 18 --mirror https://npmmirror.com/mirrors/node
5. 不兼容其他 Node 安装方式
如果你已经用其他方式安装了 Node(比如用 brew install node、官方安装包、apt-get 等),nvm 可能无法正常工作。
建议做法:
- 卸载系统自带或其他方式安装的 Node
- 使用
which node和which npm检查路径是否指向~/.nvm下的内容
6. 不能直接管理 npm 全局包
虽然 nvm 可以切换 Node.js 版本,但它不会自动迁移你之前安装的全局 npm 包。
注意事项:
- 切换 Node.js 版本后,之前的全局包需要重新安装
- 可以写脚本自动保存和恢复全局包列表
7. 默认不加载任何 Node 版本
每次打开新终端时,如果没有配置默认版本:
nvm alias default xx.x.x
则 node 命令可能不可用,直到手动运行 nvm use xx.x.x。
8. 不适用于 Docker、CI/CD 环境
在 CI 系统(如 GitHub Actions、Jenkins)或容器环境中使用 nvm 可能会导致问题,因为它是基于 shell 的函数。
替代方案:
- 使用
n(另一个 Node.js 版本管理工具,更适配脚本化) - 或者直接下载特定版本的 Node 并解压使用
✅ 小结:使用 nvm 时需要注意的关键点
| 不支持 Windows 原生 | 使用 WSL 或 nvm-windows |
| 不是全局命令 | 确保 shell 加载了nvm |
| 无法使用 sudo | 避免用sudo执行 node/npm |
| 与其他 Node 安装冲突 | 卸载旧的 Node 安装 |
| 安装速度慢 | 设置国内镜像 |
| 切换版本后缺少全局包 | 手动重装或备份包列表 |
| 新终端无默认版本 | 设置default版本 |
| 不适合 CI/CD | 使用其他自动化方式安装 Node |