Win搭建:NodeJS(nvm+nrm)
Win 搭建:NodeJS(nvm + nrm 实战教程)
本教程基于 nvm-windows v2(实测版本
2.0.2-beta.3)完整走通,覆盖:安装 nvm → 配置国内镜像 → 多版本 Node 管理 → 安装目录迁移 → nrm 源管理。所有命令均经本机实测,可直接照搬。
引言
在 Windows 上做前端/Node 开发,最头疼的两件事:Node 多版本切换 和 npm 源慢到怀疑人生。
- nvm(Node Version Manager) 解决「一台机器同时存在多个 Node 版本、随时切换」的问题。
- nrm(npm registry manager) 解决「国内访问 npm 官方源慢、要频繁改 registry」的问题。
读完本教程你可以掌握:
- 正确安装并识别正版 nvm-windows v2;
- 把 Node 下载源与 npm 装包源都切到国内;
- 安装/切换/卸载多个 LTS 版本的 Node;
- 把 Node 安装目录从 C 盘迁移到非系统盘(避免 C 盘被全局包占满);
- 用
auto_installed_modules让每个新 Node 版本自动带上常用全局工具; - 用 nrm 管理、测试、添加镜像源。
环境说明
本教程的命令示例基于以下真实环境,你抄命令时把路径里的用户名换成自己的即可:
- nvm 程序目录:
C:\Users\atodo\AppData\Local\Author Software\nvm - Node 安装目录(已迁移):
D:\ProgramData\nvm\installs - 三个已装版本:
v24.22.0(默认)、v22.23.3、v18.20.8
一、安装 nvm-windows v2
1.1 下载
务必从官方仓库下载,避免被伪装程序坑:
- 官方地址:https://github.com/nvm-windows/nvm/releases
- 下载文件:
nvm-setup.exe(稳定版)或nvm-2.0.2-beta.3-x64-setup.exe(v2 预发布版)
识别正版,别误判成木马
nvm-windows 已从 coreybutler/nvm-windows 迁移到 nvm-windows/nvm 组织,Corey Butler 仍是主要提交者;项目 stewardship 移交给了 Author Software Inc.(同一批人)。因此:
- 数字签名显示「Author Software Inc.」是正常的,不是冒名;
- v2 相比 v1(最高
1.1.x)是一次官方全量重写(Go/Zig),刻意新增了:sync后台同步服务 + 计划任务NVM for Windows Sync- Event Viewer 日志、Windows 通知中心 provider
- 捆绑
proxy.exe/reshim.exe/sync.exe等辅助程序
这些「看起来可疑」的东西,其实都是 v2 的官方设计特性,不是恶意行为。判断是否正版最关键的一招是核对官方发布的 SHA256 哈希,哈希一致即为正版。
1.2 安装后验证
安装完成后打开新的终端,执行:
nvm --version
# 预期输出:v2.0.2-beta.3(或你下载的版本号)安装目录位于:
C:\Users\<用户名>\AppData\Local\Author Software\nvm\nvm.exe二、配置国内镜像(Node 下载源)
默认情况下 nvm 从 nodejs.org/dist 下载 Node,国内很慢。改成阿里 npmmirror 镜像:
nvm config set node_mirror=https://npmmirror.com/mirrors/node npm_mirror=https://registry.npmmirror.com验证是否生效:
nvm config get node_mirror npm_mirror
# node_mirror -> https://npmmirror.com/mirrors/node
# npm_mirror -> https://registry.npmmirror.com两个 mirror 的区别
node_mirror:nvm 下载 Node 二进制时用的源(对应nodejs.org/dist的目录结构)。npm_mirror:nvm 下载 npm 本体时用的源(仅当 nvm 帮你装/更新 npm 时用到)。
两者都改到 npmmirror 即可让「装 Node」这一步在国内飞快。
三、安装 Node
3.1 安装最新 LTS
nvm install ltslts是动态别名,安装那一刻解析成「当前最新的 LTS 线」。实测解析为 Node v24.22.0。- LTS(Long Term Support)提供约 30 个月支持,API 稳定,是生产环境首选。
3.2 安装指定大版本的最新 LTS
nvm install 22 # 装 22.x 最新 LTS 线(实测 v22.23.3)
nvm install 18 # 装 18.x 最新 LTS 线(实测 v18.20.8)3.3 查看 / 切换 / 卸载
nvm ls # 列出已装版本,* 为当前默认
nvm use 22 # 临时切到 22(当前终端会话生效)
nvm use 24 # 切回 24
nvm uninstall 18 # 卸载 18装新版本不会自动覆盖默认
nvm install 只是新增一个版本,默认版本保持不变(除非你 nvm use 它)。想让某个版本成为默认,显式 nvm use <版本> 即可。
四、配置 npm 装包源(易错重点!)
这一步很多人会漏,也是本教程最关键的避坑点。
nvm 的 npm_mirror 不等于 npm install 装包时连的注册表。改了 npm_mirror 只影响 nvm 下载 npm 本体,你平时 npm install 某个包 仍然走官方 registry.npmjs.org(国内慢/可能被墙)。
要让你装包也走国内,必须单独设置 npm 的 registry:
npm config set registry https://registry.npmmirror.com/验证:
npm config get registry
# 预期:https://registry.npmmirror.com/该配置写入用户级全局文件 C:\Users\<用户名>\.npmrc,对所有 Node 版本、所有项目统一生效。
两件事别搞混
| 配置 | 作用 | 命令 |
|---|---|---|
nvm config set npm_mirror | nvm 下载 npm 程序本体的源 | 影响「nvm 装 Node」 |
npm config set registry | npm install 装业务包的源 | 影响「日常装依赖」 |
两者都要设,国内才真正丝滑。
五、把 Node 安装目录迁移到非系统盘
nvm 默认把各 Node 版本装在 C 盘 AppData\Local 下,全局包越装越多会占满 C 盘。可以改 root 把版本容器挪到 D 盘。
5.1 查看当前 root
nvm config get root
# 默认:C:\Users\<用户名>\AppData\Local\Author Software\nvm\installs每个 Node 版本一个带 v 前缀的子目录,里面就是完整可运行的 Node:
…\installs\v24.22.0\
├─ node.exe
├─ npm.cmd / npx.cmd
├─ corepack.cmd
└─ node_modules\ (npm 本体 + 你装的全局包)5.2 迁移步骤(先审后执行)
# ① 创建目标目录(示例:D:\ProgramData\nvm\installs)
New-Item -ItemType Directory -Force -Path "D:\ProgramData\nvm\installs"
# ② 把已装版本整体移动到新目录(C→D 跨盘,中途失败源不丢)
Move-Item -Path "C:\Users\atodo\AppData\Local\Author Software\nvm\installs\v24.22.0" `
-Destination "D:\ProgramData\nvm\installs\v24.22.0" -Force
# ③ 修改 nvm 的 root 配置
nvm config set root=D:\ProgramData\nvm\installs
# ④ 重建 shim(关键!否则 node/npm 命令还指向旧绝对路径)
nvm reshim
# ⑤ 验证
nvm ls # 应仍列出 v24.22.0 (default)说明:
root改的是「版本容器目录」,nvm.exe 程序本身仍在原处,无需移动;全局 npm 包随版本目录一起搬走,无需重装。
迁移后清理旧目录
确认 nvm ls 在新位置正常识别后,C 盘旧 installs 里若已无版本数据(只剩空文件夹),可删掉空文件夹释放 C 盘空间。注意 nvm.exe 程序目录不要删。
权限提醒
nvm 会告警 D:\ProgramData\nvm\installs 对其他用户可写(存在 version-dir planting 风险)。单机自用场景实际风险很低,可先照常;若想更严谨,改用私有路径如 D:\nvm\installs(ACL 更收敛)。
六、npm 包的安装位置
npm 是跟着每个 Node 版本捆绑的,不单独安装。理解「包装到哪」能避免很多困惑:
| 类别 | 位置 | 说明 |
|---|---|---|
| npm 本体 | …\installs\vXX\node_modules\npm | 每个 Node 版本自带 |
全局依赖(npm i -g) | …\installs\vXX\node_modules\ | 绑死在当前 Node 版本,切换版本后该版本的全局包为空 |
| 全局命令 bin | …\installs\vXX\(如 pnpm.cmd) | 全局工具的 .cmd 落在版本目录根 |
本地依赖(npm i) | 你跑命令的项目目录下的 node_modules\ | 没有统一目录,每个项目各一份,盘符随项目走 |
查看位置:
npm root -g # 全局 node_modules 绝对路径
npm bin -g # 全局命令可执行文件落点
npm root # 当前目录对应的本地 node_modules 路径全局包绑死版本
全局包装在当前激活版本的 node_modules 里。如果你 nvm use 22 切到另一个版本,那个版本目录是空的,之前给 v24 装的全局工具(如 pnpm)就找不到了——需要为该版本重装,或用下一节的 auto_installed_modules 机制。
七、auto_installed_modules(新版本自动装全局包)
每次 nvm install 新版本都要手动重装 pnpm/yarn?用 auto_installed_modules 一次配置、终身省事。
注:旧版 nvm-windows 是在根目录放一个
default-packages文件,每行一个包;v2 改成了逗号分隔的配置项,效果一样。
nvm config set auto_installed_modules=npm-check,nrm,pnpm,yarn设置后,将来每次 nvm install <新版本>,nvm 会自动把清单里的包 npm i -g 装进那个新版本。
不会 retroactive
该配置只影响今后的新版本,不会倒灌到已装版本。若你也想让当前版本立刻拥有这些包,需单独对当前版本跑一次:
npm install -g npm-check nrm pnpm yarn八、用 nrm 管理镜像源
nrm 是一个全局命令行工具,用来列出、切换、测速、添加 npm 镜像源,比手敲 npm config set registry 方便得多。
8.1 安装 nrm
npm install -g nrm
nrm --version # 预期 2.x8.2 常用命令
nrm ls # 列出所有内置源,* 为当前所用
nrm use taobao # 一键切换到 npmmirror(taobao 即 npmmirror 更名后的名字)
nrm use tencent # 切到腾讯源
nrm use npm # 切回官方源
nrm test # 测各源延迟,挑最快的
nrm add <名> <url> # 添加自定义源nrm ls 输出示例(实测):
* taobao ------- https://registry.npmmirror.com/
npm ------- https://registry.npmjs.org/
yarn ------- https://registry.yarnpkg.com/
tencent ------- https://mirrors.cloud.tencent.com/npm/
cnpm ------- http://r.cnpmjs.org/
...8.3 nrm 的配置文件在哪?是否全局?
nrm 没有专属配置文件来存「当前源」——它改的就是 npm 的全局配置:
- 当前生效的源:
C:\Users\<用户名>\.npmrc里的registry=...字段。nrm use改的就是这个文件,和你手动npm config set registry操作的是同一个文件,完全一致。 - 自定义源(
nrm add加的):C:\Users\<用户名>\.nrmrc。只有执行过nrm add才会创建,只存自定义源。 - 内置源(npm/yarn/tencent/cnpm/taobao/npmMirror/huawei 等):硬编码在 nrm 程序里,不在任何文件中。
三者都是用户级、全局共享——无论 nvm use 切到哪个 Node 版本,npm 都读同一个 ~/.npmrc,nrm 切换也是全局生效。
补充:若某项目目录自己有
.npmrc,它会优先于全局~/.npmrc覆盖该项目源。除此之外,nrm 管理的源全局统一。
8.4 实测:内置源可用性 + 添加可用源
对内置 7 个源实测(真实请求包元数据),结果:
| 源 | 地址 | 状态 |
|---|---|---|
| npm | registry.npmjs.org | ✅ 可用 |
| yarn | registry.yarnpkg.com | ✅ 可用 |
| tencent | mirrors.tencent.com/npm | ✅ 可用 |
| cnpm | r.cnpmjs.org | ✅ 可用 |
| taobao | registry.npmmirror.com | ✅ 可用(最快之一) |
| huawei | repo.huaweicloud.com/repository/npm | ✅ 可用(最快之一) |
| npmMirror | skimdb.npmjs.com/registry | ❌ 已死(404) |
npmMirror 是死源
内置的 npmMirror(skimdb.npmjs.com/registry/)返回 404,拿不到包元数据,不能用作 registry。别被 nrm 列表里的名字骗了,实际已废弃。
经全网检索并逐个实测候选镜像(清华 tuna、中科大镜像站只提供 npm/Node 二进制下载、不支持 npm install 包协议,已排除;netease/ustc/sjtug 返回 404 已排除),仅 腾讯云 通过测试:
nrm add tencentcloud https://mirrors.cloud.tencent.com/npm/nrm add只把源登记进~/.nrmrc,不会切换当前 registry,非常安全。- 添加后
nrm ls会多出tencentcloud一行,与内置tencent并存为两个独立源,给你多一个腾讯系冗余备份。
那些「测不通」的源
aliyun(npm.aliyun.com)、ustc 备选地址在部分受限网络下 fetch failed——可能是网络拦截而非真死。若你本机想用,可自己 nrm add 后再 nrm test 验证,确认可用再保留。
九、命令速查表
| 场景 | 命令 |
|---|---|
| 查看 nvm 版本 | nvm --version |
| 查看配置 | nvm config / nvm config get <key> |
| 设置 Node 下载源 | nvm config set node_mirror=https://npmmirror.com/mirrors/node |
| 设置 npm 本体源 | nvm config set npm_mirror=https://registry.npmmirror.com |
| 查看 Node 安装根 | nvm config get root |
| 迁移安装目录 | nvm config set root=<新路径> + nvm reshim |
| 装最新 LTS | nvm install lts |
| 装指定大版本 LTS | nvm install 22 / nvm install 18 |
| 列出已装版本 | nvm ls |
| 切换版本 | nvm use <版本> |
| 卸载版本 | nvm uninstall <版本> |
| 设 npm 装包源 | npm config set registry https://registry.npmmirror.com/ |
| 查看当前 registry | npm config get registry |
| 设新版本自动装包 | nvm config set auto_installed_modules=npm-check,nrm,pnpm,yarn |
| 全局安装工具 | npm install -g <包名> |
| 查看全局包位置 | npm root -g |
| 安装 nrm | npm install -g nrm |
| 列出/切换/测速源 | nrm ls / nrm use <源> / nrm test |
| 添加自定义源 | nrm add <名> <url> |
