NVM 常用命令
NVM 是什么
NVM(Node Version Manager) 是一个按用户、按 Shell 工作的 Node.js 版本管理工具。它可以在同一台电脑上安装多个 Node.js 版本,并在不同项目之间快速切换。
NVM 适用于 macOS、Linux,以及 Windows 的 WSL 环境;它不是原生 Windows 程序。日常开发建议优先使用 Node.js 的 LTS(长期支持)版本,具体支持状态可查看 Node.js 官方版本列表。
安装与更新 NVM
本文编写时,NVM 的最新版本为 v0.40.6。安装前可以先到 NVM Releases 确认最新版本,再使用官方 README 中提供的脚本。
使用 curl:
| |
或者使用 wget:
| |
安装脚本会尝试把 NVM 的加载配置写入 ~/.zshrc、~/.bashrc、~/.bash_profile 或 ~/.profile。安装完成后,重新打开终端,或者按当前 Shell 重新加载配置:
| |
验证是否安装成功:
| |
如果第一条命令输出 nvm,说明 NVM 已正确加载。NVM 是 Shell 函数,不是独立的可执行文件,因此官方建议使用 command -v nvm,不要使用 which nvm 验证。
更新 NVM 时,查看 NVM Releases 并把上方脚本中的版本号替换为最新版,再重新执行安装脚本即可。
NVM 官方不支持通过 Homebrew 安装的版本。遇到问题时,建议先卸载 Homebrew 版本,再按官方安装脚本重新安装。
最常用的命令
查看帮助和版本
| |
查询 Node.js 版本
| |
安装 Node.js
| |
node 表示最新发布版,lts/* 或 --lts 表示最新 LTS 版。生产项目通常应优先选择仍在支持期内的 LTS 版本。
切换 Node.js 版本
| |
nvm use 只影响当前终端会话,不会强制改变其他已经打开的终端窗口。
设置默认版本和别名
| |
卸载 Node.js
| |
不能直接卸载当前正在使用的版本。可以先执行 nvm use 切换到其他版本,再执行卸载。
使用指定版本运行命令
| |
nvm exec 很适合临时验证某条命令在不同 Node.js 版本下的表现,不需要先修改当前终端的默认版本。
缓存管理
| |
通常不需要频繁清理缓存;只有下载文件损坏或需要释放磁盘空间时再使用。
使用 .nvmrc 固定项目版本
在项目根目录创建 .nvmrc,团队成员进入项目后就可以使用同一条命令安装或切换版本。
| |
.nvmrc 也可以写完整版本号或 LTS 别名:
| |
或者:
| |
建议把 .nvmrc 提交到 Git。完整版本号的环境最一致;主版本号会自动使用该主版本下已安装的最高版本;lts/* 会随最新 LTS 版本变化,适合希望持续跟进 LTS 的项目。
升级 Node.js 时迁移全局 npm 包
不同 Node.js 版本拥有各自的全局 npm 包目录。升级版本后发现全局命令“消失”,通常不是包被删除,而是新版本中还没有安装。
安装最新 LTS,并从当前版本重新安装全局包:
| |
在两个已经安装的版本之间迁移全局包:
| |
使用 NVM 后,全局安装 npm 包通常不需要 sudo:
| |
另外,~/.npmrc 中不要设置 prefix,NPM_CONFIG_PREFIX 或 PREFIX 环境变量也可能与 NVM 冲突。
一套常见的项目工作流
| |
常见问题
安装后提示 nvm: command not found
先关闭并重新打开终端,或者执行 source ~/.zshrc / source ~/.bashrc。如果仍然无效,检查对应的 Shell 配置文件中是否存在 NVM 的加载代码。
nvm use 提示找不到版本
nvm use 只能切换到已经安装的版本。先执行:
| |
为什么不同终端中的 Node.js 版本不同
NVM 按 Shell 会话工作。一个终端中执行 nvm use 不会改变其他已经打开的终端;需要分别切换,或者通过 nvm alias default 设置新终端的默认版本。