自动切换 Node.js 版本:Windows & macOS 全平台完整指南
在日常前端开发中,我们经常需要为不同项目使用不同版本的 Node.js。
例如:
- 老项目需要 Node 14/16
- 新项目需要 Node 18/20
- 一些工具链只能运行在特定版本上
为了避免每次手动 nvm use,我们可以实现 进入项目目录时自动切换到正确的 Node 版本 。
本文将分别讲解:
macOS 自动切换 Node(nvm + zsh hook)
Windows 自动切换 Node(nvm-windows、fnm、Volta 三种方法)
.nvmrc的正确用法
📦 为什么需要自动切换 Node 版本?
- 每个项目依赖不同版本的 Node
- 避免“我本地没问题,线上构建失败”的尴尬
- 团队合作时统一环境
- 避免升级 Node 后破坏老项目
- 增强开发体验,省去反复切换 Node 的麻烦
只需要在项目根目录放一个 .nvmrc 文件,例如:
1 | 20 |
即可自动切换为 Node 20。
🍎 macOS 自动切换 Node(nvm + oh-my-zsh)
mac 用户最常用的是 nvm +oh-my-zsh。
1. 安装 nvm
1 | brew install nvm |
配置:
1 | export NVM_DIR="$HOME/.nvm" |
2. 在项目根目录创建 .nvmrc
1 | 20 |
表示 Node 20.x 任意版本。
3. 在 .zshrc 添加自动切换 hook
⚠️ 注意:必须放在 nvm 初始化代码后面,否则不生效。
1 | # ---------------- NVM 初始化 ---------------- |
4. 测试
进入项目:
1 | cd my-project |
终端会提示:
1 | Found .nvmrc → switching to Node 20 |
完成!
🪟 Windows 自动切换 Node(3 种方式)
Windows 用户没有官方的 nvm,但可以使用以下方案:
✅ 方案 A:使用 fnm (最推荐)
fnm 是跨平台、支持自动切换、性能快的 Node 管理器。
1. 安装 fnm
1 | winget install Schniz.fnm |
2. 写入 PowerShell 配置文件
1 | fnm env --use-on-cd | Out-String | Invoke-Expression |
3. 在项目目录创建 .nvmrc
1 | 20 |
4. 进入项目时自动切换
1 | cd my-project |
终端会自动切换 Node。
这是目前 Windows 上体验最接近 mac 的方案。
🟦 方案 B:Volta(npm 官方推荐)
Volta 的优点是“锁版本变成自动行为”,不需要写 hook。
1. 安装
1 | curl https://get.volta.sh | powershell |
2. 在项目目录使用
1 | volta pin node 20 |
这会生成:
1 | package.json → {"volta": {"node": "20.x"}} |
进入目录自动切 Node,无需 .nvmrc。
🟥 方案 C:nvm-windows(只能手动切换 ❌)
nvm-windows 不支持自动切换 ,必须手动:
1 | nvm use 20 |
如果你必须留在 nvm-windows,建议改用 fnm 或 Volta。
📌 .nvmrc 最佳范例
如果你只想指定主版本:
1 | 20 |
如果你想锁定具体版本:
1 | 20.19.5 |
如果你想使用最新 LTS:
1 | lts/* |
🧩 全平台结论总结
| 系统 | 最推荐方案 | 是否支持自动切换 | 备注 |
|---|---|---|---|
| macOS | nvm + zsh hook | ✔ | 开发者最常用 |
| Windows | fnm | ✔ | 完全等同于 mac 体验 |
| Windows | Volta | ✔ | 不用 .nvmrc,自动管理 |
| Windows | nvm-windows | ✖ | 不推荐 |
🎉 最终效果
配置好后,无论你是在 mac 还是 Windows,只要你:
1 | cd 项目目录 |
就能看到:
1 | Found .nvmrc → switching to Node 20 |
从此再也不用手动切 Node!
自动切换 Node.js 版本:Windows & macOS 全平台完整指南