善忘技术夹 Logo
善忘技术夹
善用佳软 开源

开发者必备神器!一文搞懂nvm,轻松切换 Node.js 版本

━━━━━━━━━━━━━━━
🌈 开场 3 秒抓人
━━━━━━━━━━━━━━━
还在用「卸载-重装-再卸载」的野蛮方式陪 Node 版本玩过家家?
今天,送你一把“瑞士军刀”:
一条命令,3 秒让 18 个项目各自乖乖躺在专属版本里,彼此井水不犯河水。
它的名字叫——nvm。

(如果你赶时间,直接翻到文末「一张图速查命令表」+「一键脚本大礼包」,复制就能跑!)

━━━━━━━━━━━━━━━
🧬 灵魂拷问:为什么非 nvm 不可?
━━━━━━━━━━━━━━━
1️⃣ 业务线“考古”:甲方突然让 2018 年的老项目改个文案,本地跑不起来?
2️⃣ 开源“兼职」:给 Vue/React 提 PR,CI 要求 Node 14/16/18 三端矩阵测试?
3️⃣ 团队“内卷」:新人 clone 代码即报错:The engine “node” is incompatible…?

一句话:只要你的电脑里会出现「两个以上」Node 版本,nvm 就是时间成本最低的解。

f7aad0e2-7356-4088-b090-5fde867653ae

━━━━━━━━━━━━━━━
🎓 前置科普:nvm 到底做了什么?
━━━━━━━━━━━━━━━

维度系统裸装nvm 托管收益
安装路径/usr/local/bin~/.nvm/versions/node/vXX.XX.X隔离、秒删
全局模块混在同一目录随版本独立存放不再“污染”
环境变量手动改写 PATH自动注入终端新开即生效
多版本并存不行随意切换0 冲突

本质:nvm 就是给每个版本单独建了个「沙盒」,再把 PATH 指来指去,行云流水。

━━━━━━━━━━━━━━━
🛠️ 安装:30 秒零配置“无痛上车”
━━━━━━━━━━━━━━━
① macOS / Linux / WSL(官方正统)

# 一键脚本(国内镜像加速版)
export NVM_DIR="$HOME/.nvm" && (
  git clone --depth 1 https://ghproxy.com/https://github.com/nvm-sh/nvm.git "$NVM_DIR"
  cd "$NVM_DIR"
  ./install.sh
)
# 写入 shell 启动文件(zsh 示例)
echo 'export NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.zshrc
source ~/.zshrc

② Windows(原生 CMD/PowerShell)
别硬杠,直接上社区维护版 nvm-windows:

winget install CoreyButler.NVMforWindows
# 装完后记得
nvm on   # 启用版本管理

━━━━━━━━━━━━━━━
📚 日常 9 招:从“能跑”到“飞起”
━━━━━━━━━━━━━━━

  1. 安装最新 LTS
nvm install --lts
nvm alias default node # 设置全局默认
  1. 批量“一锅端”
for v in 14.21.3 16.20.2 18.18.2 20.9.0; do nvm install $v; done
  1. .nvmrc 自动切换
    项目根目录执行
node -v > .nvmrc   # 把当前版本写死

以后进目录

cd my-project
nvm use            # 自动读取 .nvmrc

搭配 zsh 可再进阶:

# ~/.zshrc 末尾加
autoload -U add-zsh-hook
load-nvmrc() {
  if [[ -f .nvmrc && -r .nvmrc ]]; then
    nvm use >/dev/null 2>&1
  fi
}
add-zsh-hook chpwd load-nvmrc

实现「切目录 → 秒切版本」的丝滑体验。

  1. 全局模块“搬家”
nvm use 18
nvm install-latest-npm  # 让 npm 升到官方推荐版
npm i -g pnpm yarn ts-node
# 换版本后重新安装一次即可,沙盒隔离不再打架
  1. 清理“磁盘杀手”
nvm list               # 看所有版本
nvm uninstall 12.22.0  # 一键删,连全局模块一起消失
  1. 速度太慢?镜像安排
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
nvm install --lts
  1. CI/CD 动态矩阵
    GitHub Actions 示例:
strategy:
  matrix:
    node: [14, 16, 18, 20]
steps:
  - uses: actions/setup-node@v4
    with:
      node-version: ${{ matrix.node }}

本地测试同样一条命令:

nvm use 14 && npm test
nvm use 20 && npm test
  1. 调试 corepack
    Node 18+ 自带 corepack,用 nvm 切换版本后,corepack 会随版本激活/禁用,方便测试 pnpm/yarn berry 新特性。

  2. 版本别名“语义化”

nvm alias qa 16.20.2
nvm alias dev 18.18.2
nvm use qa   # 再也不用背数字

━━━━━━━━━━━━━━━
🧪 高阶玩法:把 nvm 做成“团队基础设施”
━━━━━━━━━━━━━━━
① 强制统一:package.json 里加

"engines": {
  "node": ">=16.20.0 <19.0.0",
  "npm": ">=8.0.0"
}

配合 .nvmrc 锁定小版本,CI 与本地双向校验,再也不怕“我这边正常”。

② Docker 友好:
多阶段构建时,把 .nvmrc 写进镜像,ARG 动态传入:

ARG NODE_VERSION=18.18.2
FROM node:${NODE_VERSION}-alpine

本地 nvm use、CI docker build --build-arg NODE_VERSION=$(cat .nvmrc),版本口径 100% 一致。

③ Monorepo 利器:
Nx、Lerna、pnpm workspace 支持不同 package 各自指定 Node,工具链用 nvm 动态切,脚本里加

nvm use $(cat apps/legacy/.nvmrc)

即可让「老古董」与「新旗舰」共存一个仓库。

━━━━━━━━━━━━━━━
⚠️ 10 年踩坑总结:这些红线别碰
━━━━━━━━━━━━━━━

  1. Windows 非 WSL 环境,切勿强行跑 nvm-sh,会踩软链接 Bug。
  2. 不要把 nvm 目录整体搬到 OneDrive/Dropbox,会导致 PATH 失效。
  3. 同时装 nvm + 官方 pkg 会“打架”,卸载系统级 Node 要干净:
    macOS sudo rm -rf /usr/local/lib/node_modules /usr/local/bin/node
  4. 全局安装 CLI 工具后,切版本发现“命令找不到”—— 每个版本沙盒独立,记得重安。
  5. 老项目 openssl 兼容报错,不是 nvm 锅,是 Node 17+ 默认 openssl3,降级或加 NODE_OPTIONS=—openssl-legacy-provider。

━━━━━━━━━━━━━━━
🗺️ 一张图速查命令表(建议收藏)
━━━━━━━━━━━━━━━

nvm list                → 查看已安装
nvm list available      → 查看官方线上版本
nvm install 18.18.2     → 安装指定版
nvm use 18.18.2         → 当前 shell 切换
nvm alias default 18    → 设置全局默认
nvm uninstall 14.21.3   → 卸载不留痕
nvm which 16            → 看该版本路径
nvm exec 14 node app.js → 临时跑单次命令

━━━━━━━━━━━━━━━
🎁 一键脚本大礼包(开箱即用)
━━━━━━━━━━━━━━━

# 1. 批量安装“前端开发四件套”
cat <<'EOF' > setup-node.sh
#!/usr/bin/env bash
set -e
versions=("16.20.2" "18.18.2" "20.9.0")
for v in "${versions[@]}"; do
  nvm install $v
  nvm use $v
  nvm install-latest-npm
  npm i -g yarn pnpm ts-node
done
nvm alias default 18
echo "✅ All done!"
EOF
chmod +x setup-node.sh
./setup-node.sh

━━━━━━━━━━━━━━━
📣 写在最后:让效率成为肌肉记忆
━━━━━━━━━━━━━━━
版本管理,是工程师“隐形”的时间杠杆。
花 10 分钟驯服 nvm,未来每个项目都能帮你省下一杯咖啡的调试时间。
日积硅步,十年就是一整块护城河。

如果本文帮到了你,去 GitHub 给 nvm 点个 ⭐ 吧!
也把这份速查表甩进同事群,别再让“版本问题”成为拖延的借口。

🚀 关于作者:
「前端真凶」公众号主理人,专注 CLI 与工程提效,每周拆解一个开发神器。
评论区告诉我:
“你因为 Node 版本被坑过最离谱的 bug 是什么?”

#nvm #NodeJS #开发效率 #工程化 #CLI艺术