人人都会AI编程

nvm/nvs 多版本管理:切换版本、隔离环境

更新时间:2026-07-10

在实际开发中,不同项目可能依赖不同的 Node.js 版本——有的老旧系统仍运行在 Node 12 上,而新项目已经基于 Node 20 的 LTS 版本开发。如果你在全局只安装了一个 Node.js,每次切换项目都要手动下载、覆盖安装,不仅繁琐,还容易引发环境冲突。多版本管理工具正是为了解决这一问题而生的。

nvm(Node Version Manager)和 nvs(Node Version Switcher)是目前社区最主流的两个 Node.js 版本管理工具。它们的核心功能类似,但在设计哲学和用法细节上略有差异。

1. 为什么需要多版本管理

  • 项目版本锁定:通过 .nvmrc.node-version 文件在项目根目录声明所需版本,团队成员一致性有保障。
  • 新版本测试:在升级 Node.js 之前,可以在本地快速切换到新版进行兼容性测试,不影响原有工作环境。
  • 全局依赖隔离:每个 Node.js 版本拥有一套独立的全局 node_modules,全局安装的工具(如 typescriptnodemon)互不干扰。
  • LTS 切换:Node.js 有多个 LTS 线路(如 16.x、18.x、20.x),可以无缝来回切换。

2. nvm:Unix 系统的事实标准

nvm 是最早出现的 Node.js 版本管理方案,仅在 Unix-like 系统(Linux、macOS)上可用。它通过修改 Shell 的环境变量,让每个终端会话都能动态选择 Node.js 版本。

安装 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

完成后重启终端或在当前 Shell 中执行:

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

常用命令

  • 列出所有可安装的 LTS 版本:
  nvm ls-remote --lts
  
  • 安装指定版本:
  nvm install 20.11.0
  nvm install 18   # 安装 18.x 最新版
  
  • 查看已安装版本:
  nvm ls
  
  • 临时切换版本(仅当前终端生效):
  nvm use 20
  
  • 设置默认版本(新开终端自动使用):
  nvm alias default 18
  
  • 在项目根目录创建 .nvmrc 文件,内容为 18,然后在目录下执行:
  nvm use
  

会自动读取 .nvmrc 并切换到相应版本。

  • 卸载某个版本:
  nvm uninstall 12.22.12
  

隔离原理:每个 Node.js 版本安装在不同目录(~/.nvm/versions/node/vX.Y.Z/)中,全局 npm 包存放在各自的 lib/node_modules 内。切换版本只是修改了 PATH 环境变量,指向对应版本的可执行文件。

3. nvs:跨平台、支持自动切换的新选择

nvs 是微软开源的项目,同样用于管理 Node.js 版本,原生支持 Windows、macOS 和 Linux。它采用配置文件(.node-version.nvmrc)实现自动切换,当进入项目目录时可以自动切换到对应版本,而不需要手动执行 nvm use

安装 nvs

macOS/Linux:

export NVS_HOME="$HOME/.nvs"
git clone https://github.com/jasongin/nvs "$NVS_HOME"
. "$NVS_HOME/nvs.sh" install

Windows 可使用安装器或 PowerShell 安装:

winget install jasongin.nvs

常用命令

  • 列出可安装的版本:
  nvs ls-remote
  
  • 安装版本:
  nvs add 20
  
  • 查看已安装版本:
  nvs ls
  
  • 切换版本:
  nvs use 18
  
  • 设置默认版本:
  nvs link 20
  
  • 在项目根目录创建 .node-version 文件,写入 18.17.0,之后 cd 进入该项目时会自动切换。若要手动触发:
  nvs auto
  

nvs 的特色

  • 自动切换:如果环境中设置了 NVS_AUTO_ON 或者在 nvs 初始化脚本中启用了 auto,那么只要当前目录或其父目录存在 .node-version.nvmrc,就会自动切换版本。这使得版本管理完全融入日常工作流。
  • 可跨平台:Windows 用户也能享受与 nvm 类似的体验,避免了 nvm-windows 等第三方衍生品的碎片化问题。
  • 更现代的架构:nvs 初始设计就考虑了自动切换、版本别名、CI 环境集成等需求。

4. 实践建议:选哪个?

  • 如果你的团队全部使用 macOS / Linux,并且习惯手动切换版本,nvm 足够成熟稳定。
  • 如果需要 Windows 支持,或更偏好“进入目录自动切换”的无意识体验,nvs 是更好的选择。
  • 无论选择哪个,都强烈建议在项目根目录放置 .nvmrc.node-version 文件,并提交到版本库。这样做能让所有协作者和 CI/CD 环境使用一致的 Node.js 版本,消除“我本地能跑”之类的环境问题。

多版本管理器让 Node.js 版本切换变得像切换 Git 分支一样简单,是现代 Node.js 开发者的必备工具之一。在下一小节中,我们将探讨包管理器的选型与使用,进一步构建完整的开发环境。