# Windows 上多版本 Node.js：绝对路径胜过 nvm

> nvm-windows 管 CLI，但每个服务固定绝对 node.exe，避免全局切换打挂生产。

**测试环境**

- 版本号: 26100.33650
- 版本: Standard / Datacenter
- 架构: x64
- 证据: E1
- 核验日期: 2026-10-29

## 一句话结论

`nvm-windows` 切换的是**全局符号链接**（`C:\Program Files\nodejs`）。对 shell 方便，对服务危险。

多应用：

1. 每个 Node 版本独立目录（`C:\node\20`、`C:\node\22`）。
2. 服务/脚本固定绝对 `node.exe`。
3. 用同目录的 `npm.cmd`。
4. `node_modules` 每应用独立，不共享全局包。

## CLI 布局

```powershell
nvm list
nvm install 22.14.0
nvm use 22.14.0
where.exe node
node --version
```

`nvm use` 后 `where node` 指向活动符号链接。开发方便；不是生产选择器。

## 每应用布局

```text
C:\node\20\node.exe
C:\node\22\node.exe
C:\apps\api-a\server.js
C:\apps\api-b\server.js
```

运行：

```powershell
& C:\node\20\node.exe C:\apps\api-a\server.js
& C:\node\22\node.exe C:\apps\api-b\server.js
```

服务包装器必须用同一绝对路径。用 `node` 创建的服务在启动时走 PATH；nvm 一切换，下次重启就可能用错版本。

## 依赖

```powershell
cd C:\apps\api-a
& C:\node\20\npm.cmd ci --omit=dev
```

用锁文件 + `npm ci` 做可重复安装。不要 `npm install -g` 应用依赖；全局包共享且无版本边界。

## 验证

```powershell
& C:\node\20\node.exe --version
& C:\node\20\npm.cmd --version
Get-CimInstance Win32_Process -Filter "Name='node.exe'" |
  Select-Object ProcessId, ExecutablePath, CommandLine
```

`ExecutablePath` 应显示固定版本，不是 nvm 符号链接。

> **警告: 全局切换就是生产事故**
>
> 两个服务都从 PATH 解析 `node`，`nvm use` 会在它们下次重启时一起变。固定绝对路径，并写进服务定义。

## 升级路径

1. 新 Node 装在旧版旁边。
2. 用新绝对 `node.exe` 跑应用测试。
3. 更新服务包装器路径。
4. 重启一个服务，看日志和指标。
5. 回滚不需要后再删旧目录。

## 实验室边界

E1。实验室没有装 Node/nvm-windows；这是生产选择器模式，不是已复现结果。

## 来源

- [nvm-windows](https://github.com/coreybutler/nvm-windows)
- [Node.js — 下载](https://nodejs.org/en/download)
- [Node.js — packages 与 CI](https://docs.npmjs.com/cli/v10/commands/npm-ci)

---

来源页面: https://winbook.fyi/zh/server/runtimes/node-multi-version/
