做前端开发或者后端用 Node.js 写脚本的人,几乎都躲不过一个坑:不同项目的 Node 版本要求不一样。老项目要 12,新项目要 20,还有的项目锁死在 16,手动装来装去最后把系统环境搞得一团糟。nvm 就是为解决这个问题而生的,它是 Node Version Manager 的缩写,用来在同一台机器上安装、切换多套 node.js 版本。这篇文章我直接把 nvm 下载安装、node.js 下载安装、全局配置、版本切换和那些高频报错一次性讲透,所有步骤都按我实际操作的流程来,适合刚接触 Node.js 的新手,也适合在 Windows、macOS、Linux 和 WSL 之间反复横跳的老手。看完你就能从零配好一套可以任意切换 Node 版本的开发环境。
1. 先搞清楚:nvm 到底在管什么
1.1 Node.js 是什么,版本为什么这么乱
很多新手最开始搜的是"node.js 是干什么的",这个问题必须先回答清楚。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,它让 JavaScript 可以脱离浏览器在服务器上跑,于是后端开发、命令行工具、前端打包构建,全都围绕它转。你用的 webpack、vite、npm、yarn 这些东西,底层都依赖 Node.js。没有它,前端工程化基本就等于零。
至于"node.js 是哪个公司开发的",这里有个常见误区。Node.js 最早是 Ryan Dahl 在 2009 年写的,它并不是某家公司的商业产品,而是由 OpenJS Foundation 运营的开源项目。Google 贡献了 V8 引擎,但 Node.js 本身是社区驱动的。所以你会在官网 nodejs.org 看到一堆贡献者和基金会的信息,而不是某个公司的版权声明。
版本乱的问题出在迭代节奏上。Node.js 分偶数版本和奇数版本,偶数版本会进入 LTS(长期支持),生产环境一般推荐用 LTS;奇数版本是当前版本,新功能多但稳定性要打个问号。再加上不同框架、工具对 Node 版本有不同要求,就会出现热词里那种"a later version of node.js"提示——你的 Node 版本太老,某个包拒绝工作。偏偏你又不能在老项目里随便升级 Node,因为老项目可能依赖了不兼容的语法或原生模块。这时候就需要一个版本管理器,让不同的项目各用各的 Node。
1.2 nvm 和 nvm-windows,别搜错了对象
nvm 是 Node Version Manager 的缩写,名字没问题,但这里有一个特别容易踩的坑:macOS 和 Linux 上用的那套叫 nvm,是 nvm-sh/nvm 这个开源项目的 shell 脚本;Windows 上用的叫 nvm-windows,是 coreybutler 用 Go 写的独立软件。两个项目命令差不多,但实现完全不一样,一个是基于 shell 函数,一个是基于可执行程序和符号链接。搜索"nvm windows"的时候,会直接指向后者,千万别拿 Linux 的安装脚本去 Windows 环境跑。
搜索引擎上还有个更坑的混淆项:AUTOSAR NVM。这是汽车电子领域里的非易失性存储器管理模块,跟 Node.js 的 nvm 完全不是一回事。你要是搜"autosar nvm"搜出一堆汽车行业的技术文档,别怀疑自己,就是撞名了。搞技术最怕这种同名异物,先确认平台再动手,能省下大量排查时间。
我简单说一下 nvm 的工作原理,方便你后面排错。Node.js 的安装包本质上是往系统里放一个 node 可执行文件和相关目录,然后写进 PATH 环境变量。手动装多个 Node 会在 PATH 里打架,新装的覆盖旧的。nvm 的思路是把所有版本统一放到一个专用目录,切换版本时修改 PATH 指向,或者像 nvm-windows 那样创建一个符号链接(默认在 C:\nodejs),让命令行只认当前激活的版本。这个原理搞清楚之后,很多环境变量相关的报错,你一眼就能看出来是怎么回事。
1.3 安装前准备:卸载旧 Node、确认系统、选好路径
在正式安装 nvm 之前,我建议先做三件事,都是血泪教训换来的。
第一,如果电脑上已经装过独立版的 Node.js,尤其是一路 Next 装到 C:\Program Files\nodejs 的那种,先通过"程序和功能"卸载干净。nvm-windows 官方文档明确说过,不推荐在有独立 Node 的环境直接装,因为旧的环境变量和目录会干扰 nvm 的符号链接,导致 nvm use 之后 node 命令还是指向旧版本。很多人装完 nvm 发现切换不生效,查来查去最后发现就是旧 Node 没清理干净。
第二,确认系统版本和当前 shell 类型。Windows 7 想用新版 Node 基本没戏,最多只能装到 13.x,原因放在后面常见问题里细说。Windows 10/11 安装 nvm-windows 时建议右键以管理员身份运行。macOS / Linux 用户先确认自己用的是 zsh 还是 bash,因为安装脚本会在对应的配置文件里追加内容,搞错 shell 会导致 nvm 命令找不到。
第三,准备好一个没有空格、没有中文的安装路径。nvm 的安装路径如果带空格或中文,后面装 Node 时经常出现路径拼接错误、命令找不到的诡异问题。我的建议是 Windows 下直接用 C:\nvm 这个路径,简单粗暴,后面基本不会因为路径踩雷。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 全平台安装 nvm:一步步来
2.1 Windows 安装 nvm-windows 的完整操作
Windows 安装 nvm 其实很简单,到 GitHub 上搜 coreybutler/nvm-windows,找到 Releases 页面,下载 nvm-setup.exe 这个安装包就行。下载的时候注意看下版本号,选最新的 release,不要下那个带 pre-release 标识的,除非你想尝鲜。
双击运行安装程序,第一步会选 nvm 的安装目录,默认在 C:\Users\你的用户名\AppData\Roaming\nvm,这个路径其实能用,但我个人建议改成 C:\nvm。原因就是前面说的:路径短、没有空格、没有中文,而且后面配置环境变量、手动改 settings.txt 的时候,短路径省心很多。第二步会问 node 的 symlink 放在哪,就是将来 nvm use 之后 node 命令实际指向的目录,默认是 C:\Program Files\nodejs,我建议改成 C:\nodejs。注意这是一个链接目录,不是真正的 Node 安装目录,后续切换版本时它会被动态重定向,你不用去管它里面的文件。
安装完成后,安装程序会自动配好两个环境变量:NVM_HOME 指向 nvm 目录,NVM_SYMLINK 指向 node 链接目录。这一步很关键,很多人装完发现 nvm 命令不认识,就是环境变量没生效。新开一个 cmd 窗口,输入 nvm version,如果显示出版本号,说明装好了。如果提示不是内部或外部命令,检查一下环境变量里的 Path 有没有包含 %NVM_HOME%,没有就手动补上,然后重开终端。
装完先别急着装 Node,先去 nvm 安装目录里打开 settings.txt,看看默认内容。正常情况下长这样:
txt复制root: C:\nvm
path: C:\nodejs
arch: 64
proxy: none
如果你的网络环境下载 Node 很慢,建议在这里加两行镜像配置,把 Node 和 npm 的下载源切到国内镜像:
txt复制root: C:\nvm
path: C:\nodejs
arch: 64
proxy: none
node_mirror: https://npmmirror.com/mirrors/node/
npm_mirror: https://registry.npmmirror.com/
node_mirror 是 nvm 下载 Node 压缩包时访问的地址,npm_mirror 是装完 Node 后 npm 默认的下载源。很多教程只让你换 npm 的源,却忘了 Node 本身的二进制包下载也可能卡住,所以我把两个都写出来。改完保存,重新开终端生效。
2.2 macOS / Linux 用官方脚本安装 nvm
macOS 和 Linux 装 nvm 就一条命令的事,直接在终端里执行:
bash复制curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
注意把命令里的 v0.40.1 换成 GitHub 上 nvm-sh/nvm 的最新 release tag,不然可能安装的是老版本。如果你没有 curl,或者网络访问 GitHub 不稳定,也可以用 git clone 的方式:
bash复制git clone https://github.com/nvm-sh/nvm.git ~/.nvm
cd ~/.nvm
./install.sh
安装脚本跑完后,会在你的 ~/.zshrc 或者 ~/.bashrc 里追加几行配置,把 nvm 的脚本路径 source 进去。然后重新打开一个终端窗口,输入:
bash复制nvm --version
如果提示 command not found,多半是配置文件没加载,手动执行一下:
bash复制source ~/.zshrc
这里补充一个底层逻辑:nvm 本质上不是一个传统可执行程序,而是一堆 shell 函数,靠 shell 启动时加载脚本才提供 nvm 命令。所以你在 CI 脚本、自动化任务、cron 里直接写 nvm 命令,经常会遇到"找不到命令"的错误,因为非交互式 shell 不一定加载了 ~/.bashrc。解决办法是在脚本开头先 source nvm.sh,路径一般在 ~/.nvm/nvm.sh。这个坑,等你在自动化流程里用 nvm 时一定会遇到,提前知道能省很多时间。
2.3 WSL 里安装 nvm,注意和 Windows 是两套环境
现在很多 Windows 用户喜欢用 WSL 做开发,热词里也有"wsl 安装 nvm 安装 node"。有个点必须先说清楚:WSL 本质上是 Windows 里的 Linux 子系统,你在里面用的是 Linux 环境,所以要按 Linux 的方式装 nvm,绝不能在 WSL 里跑 nvm-setup.exe。装出来的 Node 环境,和 Windows 侧 cmd 里的 Node 是完全独立的两套,互不干扰。
我推荐在 WSL 里先更新系统依赖,再装 nvm:
bash复制sudo apt update && sudo apt upgrade -y
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
装完同样验证 nvm --version。然后你会发现一个很容易让人困惑的现象:在 Windows 的 cmd 里 node -v 显示一个版本,进 WSL 的 bash 里 node -v 又显示另一个版本。这是正常的,因为它们是两个系统、两套环境。你只需要记住,项目在哪边跑,就在哪边配 Node。前端构建如果在 WSL 里执行,就用 WSL 里的 Node;如果在 Windows 终端里执行,就用 Windows 侧的 Node。
还有一个细节:WSL 里跑 npm install 时,如果项目依赖包含需要编译的原生模块,编译速度通常会比 Windows 快不少,因为 Linux 下的工具链更顺。但反过来,WSL 访问 Windows 文件系统(比如 /mnt/c/ 下的项目目录)会有 IO 性能损耗,所以我一般建议项目文件放在 WSL 内部的文件系统里,而不是放到 Windows 分区再跨系统访问。这不是 nvm 本身的问题,但会直接影响你的开发体验。
3. 安装与切换 Node.js 版本:核心实操
3.1 安装 Node 版本:优先选 LTS
nvm 装好之后,第一步是看远端有哪些版本可以装。Windows 的 nvm-windows 和 Linux/macOS 的 nvm,在查看可用列表这个功能上命令不一样。Windows 用:
bash复制nvm list available
Linux/macOS 用:
bash复制nvm ls-remote
list available 输出的结果会分两段,一段是 Current(当前版本),一段是 LTS(长期支持版本)。生产项目建议优先从 LTS 里选,因为 LTS 版本会持续收到安全更新,稳定性有保障。版本号以后官网 nodejs.org 发布的为准,举例来说,目前比较常见的长周期版本线是 18.x、20.x、22.x,有的项目也可能要求 24.x。
安装命令在 Windows 和 Linux/macOS 下是通用的,比如:
bash复制nvm install 22.22.3
如果你不确定项目用哪个具体版本,直接看项目根目录下的 package.json,里面有没有 engines 字段,比如:
json复制{
"engines": {
"node": ">=22.22.3 <23"
}
}
有的话就严格按照这个范围来装。装完之后,Windows 下必须手动执行一次切换才能生效:
bash复制nvm use 22.22.3
然后验证:
bash复制node -v
npm -v
这里我特别提醒一下:Windows 版的 nvm 不会在安装后自动切换,必须 nvm use 一下。很多刚用 nvm-windows 的人,装完发现 node -v 还是旧版本或者提示找不到 node,原因就是忘了 use。
3.2 版本切换、默认版本和别名,日常高频操作
日常开发里,版本切换是最高频的操作。老项目要切到 14,新项目要切到 22,来回切只需要一条命令:
bash复制nvm use 22
nvm 支持模糊匹配,nvm use 22 会切到本机已安装的 22.x 版本里最新的那个,不用把完整版本号敲全。下面这个表是我整理的最常用命令:
| 命令 | 作用 |
|---|---|
| nvm ls | 查看本机已安装的版本列表 |
| nvm ls-remote / nvm list available | 查看远端可安装版本 |
| nvm install 版本号 | 安装指定版本 |
| nvm uninstall 版本号 | 卸载指定版本 |
| nvm use 版本号 | 切换当前生效版本 |
| nvm alias default 版本号 | 设置默认版本 |
| nvm current | 查看当前生效版本 |
设置默认版本这个功能很重要。你不可能每次开终端都手动 nvm use 一遍,所以装完一个常用的 LTS 版本后,执行:
bash复制nvm alias default 22.22.3
这样每次新开终端,Node 会自动切到这个版本。Windows 的 nvm-windows 也支持 alias default,但有些老版本对这个功能的支持不是很好,如果发现设了默认版本还是没生效,检查一下环境变量里 NVM_SYMLINK 是否正确指向了 C:\nodejs。
前面说过,Windows 下切换版本的本质就是让 C:\nodejs 这个符号链接重新指向 nvm 目录下对应的版本文件夹。所以你执行完 nvm use 之后,去 C:\nodejs 里看,会发现 node.exe 其实是一个快捷方式或者符号链接,而不是真实的文件。理解这一点,你就明白为什么有些 IDE 配置 Node 解释器时,要指向 C:\nodejs\node.exe 而不是 nvm 目录里那个版本文件夹下的 node.exe。
3.3 npm 全局路径配置与环境变量,这一步别漏
很多人装完 nvm、切好版本,以为就完事了,其实还有一个隐性坑:npm 默认的全局包安装目录在用户目录下,而全局命令行工具(比如 yarn、pnpm、vue-cli、create-react-app)如果不单独配置路径,会随着 Node 版本切换变得非常难管理。等你想起来装完一个全局工具,切完 Node 版本后命令找不到了,才发现问题。
正确的做法是单独给 npm 设定全局目录,让所有 Node 版本共用一套全局工具。第一步先配置 npm 的国内镜像:
bash复制npm config set registry https://registry.npmmirror.com/
第二步配置全局包路径和缓存路径,Windows 下我习惯放在 D 盘:
bash复制npm config set prefix "D:\npm_global"
npm config set cache "D:\npm_cache"
Linux/macOS 就换成你自己的目录,比如:
bash复制npm config set prefix "$HOME/.npm-global"
npm config set cache "$HOME/.npm-cache"
设置完 prefix 之后,必须把全局路径加进 PATH,否则工具装完还是找不到命令。Windows 在系统环境变量 Path 里新增一行:
txt复制D:\npm_global
Linux/macOS 在 ~/.zshrc 里加一行:
bash复制export PATH="$HOME/.npm-global/bin:$PATH"
然后 source 一下让配置生效:
bash复制source ~/.zshrc
这样做的意义在于:无论 nvm 切换到哪个 Node 版本,你全局安装的命令行工具都能稳定执行。很多人会遇到"yarn 不是内部或外部命令"、"pnpm command not found"的报错,八成就是这个路径没配置好,或者配置完没刷新终端。
顺便再提一个权限相关的坑:在 Linux/macOS 下,如果用系统自带的 npm 全局安装工具有时会提示 EACCES 权限错误,很多教程会让你 sudo,这其实是治标不治本。改成用 prefix 配置到用户自己的目录后,权限问题基本就消失了,这也是我推荐用用户级全局路径的核心原因。
4. 高频报错与排查技巧实录
4.1 nvm install 报错:is not yet released or is not available
这个是我在帮助同事排查环境时最常遇到的报错,热词里原话是这样的:"error installing 24.19.0: node.js v24.19.0 is not yet released or is not available"。还有类似的"node.js v24.20.0 is not yet released or is not available"。
表面意思是:这个版本的 Node 还没发布,或者根本不存在。实际原因通常有两种。第一种是版本号真的敲错了,比如远端只发布到 24.18.x,你却写了 24.19.0,那就肯定找不到。第二种是你在 settings.txt 里配置了 node_mirror 镜像源,而镜像源还没有同步到最新版本,导致 nvm 去镜像目录里找不到对应的压缩包。
排查方法很简单,先看远端列表里到底有没有那个版本:
bash复制nvm list available
或者:
bash复制nvm ls-remote
如果列表里确实没有,说明版本号不对,换个真实存在的版本就行。如果列表里能看到 24.20.0,但 nvm install 24.20.0 还是报同样的错,那基本就是镜像同步滞后。解决方法是先把 settings.txt 里的 node_mirror 那行临时删掉,让 nvm 走官方源下载,装完再改回来。官方源虽然慢一点,但版本一定是最全的。
还有一个容易被忽略的细节:nvm-windows 在某个版本安装失败后,可能会缓存一些状态信息,导致你换一个版本号重装时依然报错。遇到这种情况,先执行 nvm uninstall 清理掉失败的记录,再重新安装,能绕开这个缓存问题。
4.2 找不到 node、环境变量失效、卸载清理问题
热词里有一条很典型的场景:"cc gui 下载完,显示 node.js not found (please save below and restart) please en"。这其实是一个共性问题:某个图形界面工具装好了,但它启动时要求系统里存在 Node 环境,找不到 Node 就给出这个提示。对应到日常开发里,最常见的版本是你在新终端里输入 node -v,系统提示"'node' 不是内部或外部命令"。
排查顺序我建议这样走。第一步,检查当前 node 路径到底在哪:
cmd复制where node
Windows 下如果返回了路径,说明 Node 本身没丢,只是新终端没有刷新环境变量,重开终端或者重启电脑就好。如果 where node 找不到
