
🌸你好呀!我是断弦承露
🌟感谢陪伴~ 小白博主在线求友
🌿 跟着小白学/Java/软件设计/鸿蒙开发/芯片开发
📖专栏汇总:
《软件设计师》专栏 | 《Java》专栏 | 《 RISC-V 处理器实战》专栏 | 《Flutter鸿蒙实战》专栏 | 《React Native开发》专栏 ------|CSDN|------

文章目录
- [Node.js 多版本管理完全教程:nvm 全平台安装、版本切换与新手避坑实战!在这里插入图片描述(https://i-blog.csdnimg.cn/direct/2b526ced91bb4704af3a94afa72582a5.png)](#Node.js 多版本管理完全教程:nvm 全平台安装、版本切换与新手避坑实战
) -
- [📝 本文能帮你解决什么](#📝 本文能帮你解决什么)
- [🧠 全文知识架构图](#🧠 全文知识架构图)
- [一、🔍 核心原理与认知避坑](#一、🔍 核心原理与认知避坑)
-
- [1.1 版本管理实现逻辑](#1.1 版本管理实现逻辑)
-
- [Windows平台 nvm-windows:目录符号链接方案](#Windows平台 nvm-windows:目录符号链接方案)
- [macOS / Linux 平台 nvm-sh:会话级环境隔离方案](#macOS / Linux 平台 nvm-sh:会话级环境隔离方案)
- PATH终端查找规则(关键区分,消除新手误区)
- [1.2 三大高频认知误区](#1.2 三大高频认知误区)
- [二、🪟 Windows平台:nvm-windows完整部署](#二、🪟 Windows平台:nvm-windows完整部署)
-
- [2.1 🧹 前置清理SOP(解决99%切换失效,严格按顺序执行)](#2.1 🧹 前置清理SOP(解决99%切换失效,严格按顺序执行))
- 或者使用官方卸载程序
- [2.2 📦 nvm-windows安装流程](#2.2 📦 nvm-windows安装流程)
- [2.3 ⚡ 国内镜像settings.txt标准配置](#2.3 ⚡ 国内镜像settings.txt标准配置)
- [2.4 📋 nvm-windows 核心命令速查表](#2.4 📋 nvm-windows 核心命令速查表)
- [2.5 ✅ 实操演示(双LTS版本安装切换)](#2.5 ✅ 实操演示(双LTS版本安装切换))
- [2.6 📴 内网离线部署方案](#2.6 📴 内网离线部署方案)
- [三、🍎 macOS / Linux平台:nvm-sh部署指南](#三、🍎 macOS / Linux平台:nvm-sh部署指南)
-
- [3.1 一键安装脚本](#3.1 一键安装脚本)
- [3.2 Shell持久化配置(zsh/bash)](#3.2 Shell持久化配置(zsh/bash))
-
- [zsh 配置脚本](#zsh 配置脚本)
- [bash 配置脚本](#bash 配置脚本)
- [3.3 国内镜像临时/永久配置](#3.3 国内镜像临时/永久配置)
- [3.4 nvm-sh 常用命令清单](#3.4 nvm-sh 常用命令清单)
- [3.5 全局包一键迁移](#3.5 全局包一键迁移)
- [四、📁 项目级版本锁定与团队协作](#四、📁 项目级版本锁定与团队协作)
- [五、🚨 新手高频报错全解](#五、🚨 新手高频报错全解)
-
- [报错1:nvm use exit status 5 Access is denied](#报错1:nvm use exit status 5 Access is denied)
- [报错2:nvm use提示成功,node -v版本不变](#报错2:nvm use提示成功,node -v版本不变)
- [报错3:切换提示文件被占用 / 操作无法完成](#报错3:切换提示文件被占用 / 操作无法完成)
- [报错4:Windows执行nvm --version提示无效命令](#报错4:Windows执行nvm --version提示无效命令)
- [报错5:nvm install下载超时失败](#报错5:nvm install下载超时失败)
- 报错6:IDE内置终端版本和CMD不一致
- [报错7:切换大版本npm install EINTEGRITY](#报错7:切换大版本npm install EINTEGRITY)
- 报错8:nvm-windows切换版本后全局命令依然存在、出现兼容崩溃
- [六、❓ FAQ](#六、❓ FAQ)
- [七、🏢 企业运维进阶方案](#七、🏢 企业运维进阶方案)
-
- [7.1 Windows域环境批量静默部署](#7.1 Windows域环境批量静默部署)
- [7.2 故障排查标准化SOP](#7.2 故障排查标准化SOP)
- [7.3 安全建议](#7.3 安全建议)
- [📚 参考官方信源](#📚 参考官方信源)
- [📌 环境配置流程图](#📌 环境配置流程图)
Node.js 多版本管理完全教程:nvm 全平台安装、版本切换与新手避坑实战
📝 本文能帮你解决什么
- 单设备并行运行多个 Node.js 完整语义化版本,老旧项目与新项目运行环境隔离互不干扰
- 根治
nvm use权限报错、切换成功但版本不变、下载超时、命令找不到等90%新手典型故障 - 团队统一锁定 Node.js 运行版本,消除「本地正常、线上/他人环境异常」的环境兼容纠纷
- 企业内网离线部署、多开发账号标准化运维完整落地方案
- CI/CD流水线与本地开发环境对齐,保证构建产物可复现
🧠 全文知识架构图
#mermaid-svg-KmzVmXRSglgNRPPC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-KmzVmXRSglgNRPPC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-KmzVmXRSglgNRPPC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-KmzVmXRSglgNRPPC .error-icon{fill:#552222;}#mermaid-svg-KmzVmXRSglgNRPPC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KmzVmXRSglgNRPPC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-KmzVmXRSglgNRPPC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KmzVmXRSglgNRPPC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KmzVmXRSglgNRPPC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-KmzVmXRSglgNRPPC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KmzVmXRSglgNRPPC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KmzVmXRSglgNRPPC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KmzVmXRSglgNRPPC .marker.cross{stroke:#333333;}#mermaid-svg-KmzVmXRSglgNRPPC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KmzVmXRSglgNRPPC p{margin:0;}#mermaid-svg-KmzVmXRSglgNRPPC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-KmzVmXRSglgNRPPC .cluster-label text{fill:#333;}#mermaid-svg-KmzVmXRSglgNRPPC .cluster-label span{color:#333;}#mermaid-svg-KmzVmXRSglgNRPPC .cluster-label span p{background-color:transparent;}#mermaid-svg-KmzVmXRSglgNRPPC .label text,#mermaid-svg-KmzVmXRSglgNRPPC span{fill:#333;color:#333;}#mermaid-svg-KmzVmXRSglgNRPPC .node rect,#mermaid-svg-KmzVmXRSglgNRPPC .node circle,#mermaid-svg-KmzVmXRSglgNRPPC .node ellipse,#mermaid-svg-KmzVmXRSglgNRPPC .node polygon,#mermaid-svg-KmzVmXRSglgNRPPC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KmzVmXRSglgNRPPC .rough-node .label text,#mermaid-svg-KmzVmXRSglgNRPPC .node .label text,#mermaid-svg-KmzVmXRSglgNRPPC .image-shape .label,#mermaid-svg-KmzVmXRSglgNRPPC .icon-shape .label{text-anchor:middle;}#mermaid-svg-KmzVmXRSglgNRPPC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-KmzVmXRSglgNRPPC .rough-node .label,#mermaid-svg-KmzVmXRSglgNRPPC .node .label,#mermaid-svg-KmzVmXRSglgNRPPC .image-shape .label,#mermaid-svg-KmzVmXRSglgNRPPC .icon-shape .label{text-align:center;}#mermaid-svg-KmzVmXRSglgNRPPC .node.clickable{cursor:pointer;}#mermaid-svg-KmzVmXRSglgNRPPC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-KmzVmXRSglgNRPPC .arrowheadPath{fill:#333333;}#mermaid-svg-KmzVmXRSglgNRPPC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KmzVmXRSglgNRPPC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KmzVmXRSglgNRPPC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KmzVmXRSglgNRPPC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-KmzVmXRSglgNRPPC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KmzVmXRSglgNRPPC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-KmzVmXRSglgNRPPC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KmzVmXRSglgNRPPC .cluster text{fill:#333;}#mermaid-svg-KmzVmXRSglgNRPPC .cluster span{color:#333;}#mermaid-svg-KmzVmXRSglgNRPPC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-KmzVmXRSglgNRPPC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-KmzVmXRSglgNRPPC rect.text{fill:none;stroke-width:0;}#mermaid-svg-KmzVmXRSglgNRPPC .icon-shape,#mermaid-svg-KmzVmXRSglgNRPPC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KmzVmXRSglgNRPPC .icon-shape p,#mermaid-svg-KmzVmXRSglgNRPPC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-KmzVmXRSglgNRPPC .icon-shape .label rect,#mermaid-svg-KmzVmXRSglgNRPPC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KmzVmXRSglgNRPPC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-KmzVmXRSglgNRPPC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-KmzVmXRSglgNRPPC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Node.js多版本管理
核心原理与认知避坑
Windows平台nvm-windows部署
macOS/Linux平台nvm-sh部署
项目级版本锁定与团队协作
新手高频报错全解
常见问题FAQ
企业运维与CI进阶
符号链接工作机制
PATH环境变量终端差异原理
三大认知误区纠正
旧版Node.js彻底清理SOP
工具安装与环境验证
国内镜像加速配置规范
核心命令速查表
双版本安装切换实操
官方脚本一键安装
多终端Shell持久化配置
常用命令清单
全局包版本迁移方案
.nvmrc跨平台编写规范
Windows自动切换脚本
团队协作工程化最佳实践
权限拒绝类报错
切换不生效冲突排查
下载失败网络问题
命令参数混淆故障
依赖原生模块兼容报错
nvm-windows vs nvm-sh完整对比
版本升级与重装注意事项
无管理员权限替代方案
内网离线部署流程
GitHub Actions CI环境对齐
域环境批量部署与权限策略
一、🔍 核心原理与认知避坑
1.1 版本管理实现逻辑
nvm(Node Version Manager,Node版本管理器)是行业主流Node多版本管理工具。
重点区分:Windows nvm-windows 与 macOS/Linux nvm-sh 是两套完全独立开源项目,实现原理、命令集合、行为表现存在显著差异,不可混用文档。
- nvm-windows:Go语言编译独立二进制可执行程序,依托Windows NTFS文件系统符号链接实现版本切换
- nvm-sh:纯Shell函数集合,需要加载至终端会话,依靠动态修改进程环境变量实现会话级隔离
Windows平台 nvm-windows:目录符号链接方案
目录符号链接(Symbolic Link /D) :NTFS文件系统重解析点,区别于.lnk桌面快捷方式(仅资源管理器识别);所有进程、终端均可透明访问。
两种Windows目录链接重要区分:
- Junction(联接点 /J):不支持目标跨盘符,无需特殊权限;
- 目录符号链接(/D):支持目标目录跨盘符;创建默认需要
SeCreateSymbolicLinkPrivilege权限。
nvm-windows 统一选用目录符号链接,适配开发者将Node版本库放置D/E盘的场景。
工作流程:
nvm-windows 维护一个固定全局入口路径(默认C:\Program Files\nodejs),所有Node.js版本存放至nvm根目录下独立v<x.y.z>文件夹。执行nvm use时,修改符号链接指向对应的版本目录。
底层硬性约束:
NTFS规则:同名物理文件夹不能被符号链接覆盖;若目标路径本身是旧符号链接,则允许直接替换 。
因此安装前必须彻底删除C:\Program Files\nodejs实体目录,仅残留符号链接也建议一并清理。
行为边界:
修改系统全局符号链接,切换后对本机所有新启动终端全局永久生效、重启电脑保持配置 ;
⚠️ 重要边界:已经启动并缓存node.exe路径的长期运行程序(IDE后台进程、本地服务),进程生命周期内不会自动刷新版本。
⚠️ 补充:单人日常开发无感知;多开发账号共用一台电脑、多人同时执行nvm use仅会发生"后执行覆盖先执行",属于原子替换,不会损坏链接文件。
⚠️ 关键设计特性:nvm-windows不自动隔离npm全局包 ,默认共用系统
%AppData%\npm目录,跨Node.js大版本切换易出现全局命令二进制兼容报错。
macOS / Linux 平台 nvm-sh:会话级环境隔离方案
nvm-sh部署于当前用户家目录~/.nvm,依靠NVM_DIR定位根目录;终端加载脚本注册Shell函数。执行nvm use同步完成3项核心操作:
- 调整当前终端进程
PATH优先级,优先读取目标Node.js版本bin目录 - 设置
npm_config_prefix环境变量,重定向npm全局包路径至当前版本独立目录 - 更新
NVM_BIN配套环境变量保障子进程环境一致(NVM_INC为内部私有变量,不建议业务脚本依赖)
行为边界:
仅修改当前终端会话内部环境变量 ;新开终端环境重置;依靠nvm alias default <version>设置新终端默认版本;天然实现多用户环境隔离,互不干扰。
重要提示:nvm-sh属于Shell函数,并非独立二进制;定时任务、Shell脚本等非交互式终端 不会自动加载,调用前必须手动执行
source ~/.nvm/nvm.sh。
PATH终端查找规则(关键区分,消除新手误区)
PATH是操作系统可执行文件检索目录列表,两套终端行为存在差异:
- CMD:检索顺序
当前工作目录 → 系统PATH → 用户PATH - PowerShell:PATH检索顺序
系统PATH → 用户PATH; 独立安全策略:PowerShell默认不允许直接运行当前目录下可执行文件,必须使用.\node.exe,该规则与PATH优先级相互独立。
Windows通用优先级:系统环境变量PATH > 用户环境变量PATH;旧Node.js残留写入系统PATH,是切换不生效头号诱因。
1.2 三大高频认知误区
❌ 误区1:Windows与macOS使用的是同一个nvm程序
两套项目代码完全独立,官方原文提示:This is not the same thing as nvm!
关键差异示例:nvm alias default仅nvm-sh支持;nvm-windows无别名系统,但支持lts/latest关键字用于install/use。
❌ 误区2:切换Node.js版本需要手动修改系统环境变量
标准场景完全不需要,工具自动处理;仅旧版本残留冲突时需要人工清理PATH。
❌ 误区3:本机已有Node.js,可以直接安装nvm无需卸载
Windows平台强烈禁止,物理目录冲突直接导致符号链接创建失败;macOS/Linux冲突概率更低,但依旧建议卸载Homebrew/apt全局Node.js,规避PATH优先级冲突。
新增重要提醒:不要同时混用 Windows nvm-windows + WSL内部nvm-sh,两套环境PATH互通极易造成版本混乱。
二、🪟 Windows平台:nvm-windows完整部署
2.1 🧹 前置清理SOP(解决99%切换失效,严格按顺序执行)
前置提醒:本机若安装fnm、Volta、nvs等其他Node.js版本管理器,必须完整卸载,清理环境变量,防止PATH冲突。
fnm、Volta、nvs、nvm-windows 不能共存;多个工具同时存在时,PATH里会同时存在好几套 node 入口路径,系统会随机优先调用其中某一个工具的 node;
哪怕你用 nvm 切换了版本,系统读取到的永远是另一套工具绑定的 Node 版本,最终现象:
nvm use提示切换成功,但 node -v 版本纹丝不动。
这些工具互相抢占 PATH 优先级、抢占node/npm命令挂载,没有兼容方案,所以必须全部卸载
-
卸载官方Node.js安装包
Win+R输入
appwiz.cpl,卸载全部名称包含Node.js的程序。 -
【必做】关闭Windows应用执行别名(最高优先级冲突源)
Win+I打开设置 → 搜索「应用执行别名」
找到
Node.js两条开关,全部设置为关闭
故障特征:执行
where node出现C:\Users\xxx\AppData\Local\Microsoft\WindowsApps\node.exe,代表别名未关闭,无论如何切换nvm都不会生效。
- 删除残留物理目录与旧符号链接
C:\Program Files\nodejs:强制删除,重中之重(实体目录+旧符号链接一并清除)%AppData%\npm:旧npm全局包目录%AppData%\npm-cache:npm缓存目录
使用方式:资源管理器地址栏直接粘贴
%AppData%回车直达目录。
- 清理环境变量
此电脑 → 属性 → 高级系统设置 → 环境变量
或者win键直接搜索
在系统变量Path、用户变量Path 中,删除所有包含nodejs、npm的条目。
-删掉 %AppData%\npm、npm-cache:属于可选操作(清理旧全局包 / 缓存),不删也能装 nvm;
-卸载 Node 本体、卸载 fnm/volta/nvs、关闭应用别名、删C:\Program Files\nodejs、清理 PATH 环境变量:必须做,是为了消除路径优先级冲突,保证 nvm 切换版本生效;
- 验证清理结果
完全关闭所有旧终端,新开CMD/PowerShell执行:
batch
node -v
npm -v
预期:提示「不是内部或外部命令」,代表清理完成。

重装兜底流程:卸载nvm → 删除nvm根目录 → 再次执行本节全部清理步骤 → 重启电脑再重装。
或者使用官方卸载程序
点击 Uninstall Node.js 运行官方卸载程序;

win键搜索Node.js
重启电脑一次;
按照教程步骤:
① 关闭 Node.js 应用执行别名
② 手动删除 C:\Program Files\nodejs 文件夹(防止残留)
③ 删除 %AppData%\npm、%AppData%\npm-cache(可选,想环境干净就删)
④ 打开环境变量,核对系统 / 用户 Path,删掉所有剩余 node、npm 相关路径
新开 CMD 输入 node -v,提示命令不存在 = 清理完毕,可以安装 nvm。
辅助命令清单(cmd)
找到正在使用的 node 程序位置
bash
where node

npm 全局目录
bash
npm config get prefix
npm 缓存目录
bash
npm config get cache
查看全部 PATH
bash
echo %PATH%
结合场景重点说明:
where node 如果输出:C:\Program Files\nodejs\node.exe
→ 就是你 MSI 安装包的默认路径;
如果你后面用绿色免压缩包临时方案,where node 只会找到系统默认 node,不会自动识别解压的旧版本,必须手动临时前置 PATH;
如果你后续卸载 Node:卸载后再运行 where node,理想结果是提示找不到文件。
2.2 📦 nvm-windows安装流程
- 版本选型【2026最新建议】
官方仓库:https://github.com/coreybutler/nvm-windows/releases
- 日常开发,仅使用Node.js 16+现代版本:下载最新
nvm-setup.exe(v1.2.2) - 需要长期兼容Node.js14及更早EOL停止维护版本:v1.2.x在安装部分老旧EOL版本存在兼容性问题,推荐选用v1.1.12稳定版;⚠️ v1.1.12对新版Node部分新特性支持有限,按需取舍。

nvm-setup.exe(绝大多数人首选)
Windows 标准安装程序,图形向导安装,自动写入基础环境变量。
✅优点:操作最简单;
❗缺点:后续卸载需要走正常卸载流程,会在系统留下少量配置痕迹。
nvm-noinstall.zip(绿色免安装版)
纯绿色压缩包,无需安装,解压即用,不会自动修改系统环境变量。
重点匹配你的场景:只是临时短期使用,用完想彻底删干净、不留任何系统残留。
✅优点:不想用的时候直接删除整个文件夹,整机无任何遗留文件、注册表;
❗缺点:需要手动配置环境变量,操作多一步。
nvm-setup.zip:把安装程序打包成 zip,等价于直接下载nvm-setup.exe,没必要选。
.checksum.txt:哈希校验文件,用来验证安装包有没有被篡改,普通用户不用下载。
Source code:源代码,开发人员使用,普通使用者忽略。
重要安装路径约束✅ 安装路径必须纯英文、无空格、无中文、无特殊字符 ;
❌ 禁止路径:
C:\Program Files\nvm(存在空格)、C:\用户\张三\nvm(中文用户名)、不要放置OneDrive云同步目录(文件锁引发符号链接异常)推荐路径示例:
C:\nvm符号链接路径保持默认
C:\Program Files\nodejs,不建议修改。空间不够点此更换安装目录
这个目录 C:\nvm4w\nodejs 是符号链接(软链接)目录
✅ 作用:
执行 nvm use xxx 切换版本时,这个文件夹会动态指向你选中的 Node 版本,系统通过这个路径调用 node/npm。
等价教程里默认的 C:\Program Files\nodejs,不要和你原来安装 Node 的文件夹混淆!
选择建议
直接使用默认路径 C:\nvm4w\nodejs(推荐,省心)
优点:
纯英文、无空格、无中文,完全符合 nvm 要求;
不在受保护的Program Files目录,减少 UAC 权限报错概率;
⚠️ 记住一条硬性规则:
👉 安装完成后,绝对不要手动去新建、删除这个文件夹!由 nvm 自动管理。
直接点击 Next 继续下一步。
桌面通知(预览功能)
作用:程序会在 Windows 右下角弹出系统通知,提醒你有新版本发布。
四个勾选项含义:
Node.js LTS releases
收到 Node 长期支持稳定版更新推送通知
Node.js Current releases
收到 Node 最新测试版更新推送通知
NVM For Windows releases
收到 nvm-windows 软件本身新版本通知
Author updates and releases
作者相关资讯、新版工具预告推送
✅ 建议
要是你只是临时短期使用,用完就卸载,完全不需要通知:
把全部四个方框的√全部取消 → 点击 Next
长期使用:
取消最后一项 Author updates and releases(作者资讯预告)
保留前三个勾选:
✅ Node.js LTS releases(稳定长期版更新,生产项目重点关注)
✅ Node.js Current releases(前沿新版本)
✅ NVM For Windows releases(nvm 工具自身升级提醒,修复 bug)
❌ 取消:Author updates and releases(属于作者个人动态,和工具使用无关)
标题:作者开发进度邮件订阅(可选)
正文含义:
Author 是 nvm-windows 的下一代继任工具。填入邮箱,你将会收到项目开发进度、发布计划、企业版功能相关邮件通知;输入框留空 = 不订阅邮件。
✅ 推荐操作
直接保持输入框空白,不用填写任何邮箱,点击 Next
该订阅完全非强制,不填邮箱不会影响 nvm-windows 任何功能;
日常前端开发几乎不需要追踪作者新项目进度,避免收到无关邮件;
无论你打算临时使用还是长期使用,都建议留空跳过。
💡补充小知识
Author 是该开发者正在开发的新一代 Node 版本管理工具,属于未来产品,和当前安装的 nvm-windows 相互独立
- 安装后环境验证
全部终端窗口关闭。
⚠️ 首次执行
nvm use默认需要管理员权限;永久免管理员可开启Windows开发者模式。以管理员身份打开CMD/PowerShell:
batch
nvm version

✅ 正常输出示例:1.2.2
❌ 新手易错:Windows工具使用
nvm version(单横杠);nvm --version(双横杠)不支持,命令报错。
💡 永久免管理员配置:
Win+I → 隐私和安全性 → 开发者选项 → 开启【开发者模式】
新版 Win11 已经把「开发者选项」从【隐私和安全性】迁移到 系统 → 高级 
原理:授予当前用户SeCreateSymbolicLinkPrivilege创建符号链接权限。
边界说明:
- Windows内置Administrator账号默认关闭UAC,无需开启开发者模式;
- 权限仅对交互式终端生效;计划任务、后台服务进程不受该策略影响;
- 企业域环境组策略可能强制覆盖本地权限策略,开启后依然无效请联系运维管理员;权限仅对当前登录用户生效。
如果你账户本身属于管理员组,UAC 开启状态下,部分新版 Windows 即便开了开发人员模式,依然会要求管理员终端执行nvm use(微软 UAC 隔离机制)。
精简版 / 品牌 OEM 预装系统、企业域电脑,组策略可能锁定该权限,开启开关也无效。
微软官方规则:标准普通账户:开启开发人员模式 → 普通终端允许创建软链接
管理员账户(日常绝大多数人):UAC 开启状态下,强制要求「右键以管理员运行」终端
这是 UAC 虚拟化隔离机制,无法靠开发者模式绕过。
👉 这就是很多人开了开关依旧报错的根源!
💡 查看nvm根目录:
batch
nvm root
输出格式示例:Current Root: C:\nvm

belike:nvm 根目录 = D:\nvm
所有你后续下载安装的各个 Node.js 版本,都会存放在这个文件夹内部(自动生成 vxx.x.x 子文件夹)。
注意:复制路径只选取冒号后方内容,前缀文本不能粘贴进资源管理器地址栏。
2.3 ⚡ 国内镜像settings.txt标准配置
⚠️ 高频错误约束清单:
- 键名与冒号之间必须保留一个英文空格
- 镜像URL末尾必须带上斜杠
/node_mirror、npm_mirror两条必须同时配置- 注释统一写在配置顶部,不要穿插在有效配置中间,防止解析异常
- 仅推荐npmmirror官方镜像,不要使用不知名第三方镜像源
操作步骤:
nvm root打开根目录,打开settings.txt- 在文件末尾追加配置
txt
# Node.js 安装包国内镜像
node_mirror: https://npmmirror.com/mirrors/node/
# npm内置cli下载镜像
npm_mirror: https://npmmirror.com/mirrors/npm/
# proxy: none # 需要代理时解除注释填写地址
- 保存文件,重启终端生效。
settings.txt核心参数说明:
- root:nvm存放各Node.js版本的根目录
- path:Node.js全局符号链接入口路径
- arch:默认安装架构32/64
- proxy:下载代理地址
2.4 📋 nvm-windows 核心命令速查表
全局统一规则:
执行命令输入完整语义化版本(x.y.z)不带v前缀 ;
node -v、npm -v命令输出自带v前缀。
| 命令 | 功能 | 关键注意事项 |
|---|---|---|
nvm version |
查询nvm自身版本 | 单横杠参数,不要使用--version |
nvm root |
查看nvm根目录 | 输出带有Current Root: 前缀 |
nvm list available |
查询远端可安装Node.js版本 | 优先选择LTS长期支持版本 |
nvm install latest |
安装最新Current正式版 | |
nvm install lts |
安装最新远端LTS版本 | ✅官方支持关键字;⚠️仅下载安装,不会自动切换为当前使用版本 |
nvm install 20.18.1 |
安装指定完整语义化版本 | |
nvm use latest |
切换本地已安装最新版本 | |
nvm use lts |
切换本地已安装最新LTS版本 | ✅官方支持关键字;⚠️本地未安装任意LTS版本时执行直接报错,需要先完成安装 |
nvm use 20.18.1 |
切换指定Node.js版本 | 默认管理员权限,全局永久生效 |
nvm list |
列出本地已安装版本 | 当前激活版本标注* |
nvm current |
快速查看当前Node.js版本 | |
nvm on / nvm off |
启用/禁用nvm管理 | off删除全局符号链接,node命令直接失效;on自动恢复上次激活版本 |
nvm uninstall 20.18.1 |
卸载指定版本 | 不能卸载正在使用中的版本 |
重点说明:nvm-windows 没有
nvm alias、nvm alias default命令 ;nvm use执行后自动永久全局生效,无需额外设置默认版本。
2.5 ✅ 实操演示(双LTS版本安装切换)
⚠️ 20.18.1、24.18.0仅为示例版本,正式使用前通过
nvm list available查询最新LTS版本号
nvm list available 只会展示一部分新版本清单,旧版本不会全部列出来!
列表看不到 ≠ 不能安装,直接完整版本号执行安装命令即可。比如安装 Node 18.20.8
powershell执行
nvm install 18.20.8
会自动识别你的系统安装对应版本
batch
:: 安装20.x LTS完整版本
nvm install 20.18.1
:: 安装24.x LTS完整版本
nvm install 24.18.0
:: 查看本地已安装列表
nvm list
:: 切换至20.18.1
nvm use 20.18.1
:: 验证
node -v
npm -v



2.6 📴 内网离线部署方案
- 访问npmmirror镜像站,根据系统架构下载对应
win-x64.zip / win-x86.zip预编译包
官方哈希文件地址示例:https://npmmirror.com/mirrors/node/v20.18.1/SHASUMS256.txt
batch
:: SHA256校验命令
certutil -hashfile node-v20.18.1-win-x64.zip SHA256
nvm root打开nvm根目录,新建文件夹,命名格式v+完整语义化版本 ,示例v20.18.1(必须带v前缀)- 解压压缩包,直接将所有一级文件放入v20.18.1
✅ 正确:v20.18.1/node.exe
❌ 错误:v20.18.1/node-v20.18.1-win-x64/node.exe(禁止嵌套一层目录) nvm list识别版本,执行nvm use测试可用;解压后务必检查目录内存在node.exe,避免解压层级错误。
三、🍎 macOS / Linux平台:nvm-sh部署指南
3.1 一键安装脚本
前置依赖:macOS先安装Xcode命令行工具
bash
xcode-select --install
前置清理:Homebrew安装过Node.js执行
brew uninstall node,规避PATH冲突官方安装脚本:
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.6/install.sh | bash
国内网络异常备选方案:镜像加速raw资源、本地下载install.sh脚本执行。
3.2 Shell持久化配置(zsh/bash)
先确认当前Shell类型
bash
echo $SHELL
/bin/zsh → zsh(macOS默认);/bin/bash → bash
zsh 配置脚本
bash
if [ ! -f ~/.zshrc ]; then
touch ~/.zshrc
fi
# 仅当nvm安装文件存在时追加配置,避免终端启动报错
if [ -d "$HOME/.nvm" ] && [ -f "$HOME/.nvm/nvm.sh" ]; then
if ! grep -Eq '^\s*[^#].*source ~/.nvm/nvm.sh' ~/.zshrc; then
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.zshrc
fi
fi
# 重载配置
source ~/.zshrc
# 校验nvm是否正常加载(检测Shell函数,优于command -v)
if [ "$(type -t nvm)" = "function" ]; then
echo "✅ nvm加载成功"
else
echo "⚠️ nvm加载失败排查清单:
1. ~/.nvm目录是否完整存在
2. 使用对应终端的配置文件(zsh使用.zshrc)
3. 配置文件语法无错误"
fi
bash 配置脚本
bash
if [ ! -f ~/.bashrc ]; then
touch ~/.bashrc
fi
if [ -d "$HOME/.nvm" ] && [ -f "$HOME/.nvm/nvm.sh" ]; then
if ! grep -Eq '^\s*[^#].*source ~/.nvm/nvm.sh' ~/.bashrc; then
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc
fi
fi
source ~/.bashrc
if [ "$(type -t nvm)" = "function" ]; then
echo "✅ nvm加载成功"
else
echo "⚠️ nvm加载失败排查清单:
1. ~/.nvm目录是否完整存在
2. 使用对应终端的配置文件(bash使用.bashrc)
3. 配置文件语法无错误"
fi
补充提示:
- 多终端环境(zsh+fish)每个终端独立配置
- SSH、定时任务非交互式终端,需要额外在
~/.zprofile/~/.bash_profile写入加载脚本- macOS大版本升级可能重置Shell配置,导致nvm失效,重新执行配置脚本修复
验证安装:
bash
nvm --version
3.3 国内镜像临时/永久配置
临时生效(当前终端)
bash
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
永久生效:将该行写入.zshrc/.bashrc
Tip:先以npm为主,后期⽹速过慢再考虑cnpm或切换镜像源
设置npm镜像源
bash
npm config get registry
npm config set registry=https://registry.npmmirror.com
3.4 nvm-sh 常用命令清单
| 命令 | 功能 | 备注 |
|---|---|---|
nvm --version |
查看nvm版本 | 双横杠 |
nvm debug |
环境自动诊断 | 排错首选 |
nvm ls-remote --lts |
查看所有远端LTS版本 | |
nvm install --lts |
安装最新LTS | |
nvm install 24 --arch=x64 |
Apple Silicon强制安装x64架构Node.js | |
nvm use 24.18.0 |
切换当前会话Node.js版本 | 仅当前终端生效 |
nvm alias default 24.18.0 |
设置新开终端默认版本 | nvm-sh独有功能 |
nvm ls |
列出本地已安装版本 | |
nvm uninstall 24.18.0 |
卸载版本 |
3.5 全局包一键迁移
安装新版本Node.js,自动从旧版本重装全部全局工具(仅重新下载安装,不直接复制文件)
bash
nvm install 24 --reinstall-packages-from=20
四、📁 项目级版本锁定与团队协作
4.1 .nvmrc 跨平台编写规范
项目根目录新建.nvmrc,文件内写入版本
推荐标准内容(兼容性最强)
24.18.0
强制格式规范
- 编码:UTF-8 无BOM
- 换行符:LF;Windows默认CRLF会携带
\r造成匹配失败 - 文件内容:仅一行版本号,无首尾空格、无空行
- 禁止使用UTF-16编码
Windows记事本新建陷阱:默认保存为
.nvmrc.txt;需要开启「文件扩展名」再创建。PowerShell安全创建命令(避免UTF16编码)
powershell
"24.18.0" | Out-File .\.nvmrc -Encoding utf8
Git仓库配套规范:在
.gitattributes增加规则,强制.nvmrc使用LF换行,防止Windows用户提交CRLF污染
*.nvmrc text eol=lf
跨平台支持边界
- nvm-sh:原生支持
.nvmrc,进入目录直接执行nvm use自动读取版本 - nvm-windows:官方原生不支持,依赖自定义PowerShell脚本实现自动切换
4.2 Windows PowerShell自动切换脚本
前置提示:
- OneDrive同步文档目录会重定向
$PROFILE,执行echo $PROFILE确认真实路径,防止修改配置文件不生效- 脚本仅劫持
cd命令;pushd/popd不会触发检测,属于设计限制- 与posh-git等修改cd别名的模块存在冲突,异常时移除别名
- PowerShell默认Restricted执行策略会阻止脚本加载,执行一次放行:
powershellSet-ExecutionPolicy RemoteSigned -Scope CurrentUser
执行notepad $PROFILE打开配置文件,粘贴完整代码:
powershell
<#
.SYNOPSIS
进入目录自动读取.nvmrc切换Node.js版本
#>
function Invoke-NvmAutoUse {
if (-not (Get-Command nvm -ErrorAction SilentlyContinue)) {
return
}
if (Test-Path .\.nvmrc -PathType Leaf) {
try {
$rawContent = Get-Content .\.nvmrc -Raw -Encoding utf8 -ErrorAction Stop
$targetVersion = $rawContent.Trim()
if (-not ($targetVersion -match '^\d+\.\d+\.\d+$')) {
Write-Warning ".nvmrc格式异常,请使用完整语义化版本x.y.z"
return
}
$installedList = nvm list
if (-not $installedList) {
Write-Warning "本地未安装任何Node.js版本,请先执行nvm install $targetVersion"
return
}
# 修复正则缺陷,防止20.18.1错误匹配20.18.10
$regPattern = "^\s*\*?\s*" + [regex]::Escape($targetVersion) + "(?=\s|$)"
$matchResult = $installedList | Select-String $regPattern
if ($matchResult) {
Write-Host "📌 检测项目.nvmrc,自动切换至Node.js $targetVersion"
nvm use $targetVersion
} else {
Write-Warning "项目要求Node.js $targetVersion,本地未安装,请执行 nvm install $targetVersion"
}
}
catch {
Write-Warning "读取.nvmrc异常:$($_.Exception.Message)"
}
}
}
function Set-LocationWithNvm {
[CmdletBinding()]
param(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$Path,
[switch]$PassThru,
[switch]$LiteralPath
)
Set-Location @PSBoundParameters
Invoke-NvmAutoUse
}
Set-Alias cd Set-LocationWithNvm -Option AllScope -Force
4.3 团队协作最佳实践
- 双重版本约束
package.json增加engines字段,限定Node.js与npm范围
json
"engines": {
"node": ">=20.0.0 <25.0.0",
"npm": ">=10.0.0"
}
项目根目录新建.npmrc,开启严格引擎校验
ini
engine-strict=true
不推荐全局执行
npm config set,避免污染所有本地项目。
- Monorepo仓库规范:仓库根目录放置统一
.nvmrc;子包需要独立版本时,在子包目录单独放置。 - Git提交钩子:搭配husky pre-commit校验当前Node.js版本。
- GitHub Actions CI配置(自动读取.nvmrc,环境对齐本地)
yaml
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version-file: '.nvmrc'
cache: 'npm'
# 注意:setup-node@v7要求Runner版本≥v2.327.1;私有Runner版本过低会抛出不支持报错
# 降级v6依然存在最低Runner限制;兜底方案:预先手动下载node二进制
- run: npm ci
- run: npm run build
- run: npm test
五、🚨 新手高频报错全解
报错1:nvm use exit status 5 Access is denied
现象:权限拒绝无法切换
根因:缺少创建符号链接权限,UAC限制管理员普通终端权限令牌。
解决方案:
- 临时:管理员身份启动终端执行
- 永久:开启Windows开发者模式
- 域环境:联系管理员组策略开放
SeCreateSymbolicLinkPrivilege
报错2:nvm use提示成功,node -v版本不变
标准化排查顺序:
where node查看所有node路径- 路径包含
WindowsApps→ 应用执行别名未关闭(最高优先级) - 出现非nvm目录node → 旧Node.js未清理干净
- 仅存在nvm符号链接路径 → 重启终端/IDE刷新环境(IDE进程缓存路径)
报错3:切换提示文件被占用 / 操作无法完成
根因:
① 后台node进程占用node.exe;
② Windows Defender「受控文件夹访问」、第三方杀毒拦截符号链接创建,报错文字和UAC权限高度相似,注意区分。
解决方案:
- 关闭所有开发服务,任务管理器结束全部
node.exe - 将nvm根目录、
C:\Program Files\nodejs加入杀毒/受控文件夹访问白名单
报错4:Windows执行nvm --version提示无效命令
根因:参数混淆,Windows使用nvm version
报错5:nvm install下载超时失败
- 配置npmmirror镜像源
- 删除目录内不完整残留版本文件夹
- 内网环境使用离线安装方案
报错6:IDE内置终端版本和CMD不一致
根因:IDE启动时缓存环境变量
VS Code:Ctrl+Shift+P → 重新加载窗口;通用方案:重启IDE。
报错7:切换大版本npm install EINTEGRITY
不同Node.js内置npm版本缓存哈希不兼容
batch
npm cache clean --force
rmdir /s /q node_modules
del package-lock.json
npm install
报错8:nvm-windows切换版本后全局命令依然存在、出现兼容崩溃
根因:默认共享%AppData%\npm全局目录,不隔离。
解决方案:出现报错则重新全局安装对应工具;追求完全隔离可手动为每个Node.js版本配置独立npm prefix;推荐使用Corepack管理包管理器。
六、❓ FAQ
Q1:两套nvm核心差异对照表
| 特性 | nvm-windows | nvm-sh(macOS/Linux) |
|---|---|---|
| 程序形态 | Go独立二进制 | Shell函数,需要加载脚本 |
| 切换生效范围 | 全局所有新启动终端、永久 | 当前终端会话,新开重置 |
| 全局npm包 | 默认不隔离 | 天然版本隔离 |
| 查看自身版本 | nvm version |
nvm --version |
| 查看远端版本 | nvm list available |
nvm ls-remote |
| 默认版本设置 | 无alias,use永久生效 | nvm alias default |
| .nvmrc原生支持 | ❌ 需要脚本扩展 | ✅原生支持 |
| lts关键字 | ✅ install/use可用 | ✅支持 |
| 全局包一键迁移 | ❌不支持 | ✅--reinstall-packages-from |
| use是否管理员 | 默认需要 | 不需要 |
Q2:不卸载原有Node.js直接安装nvm?
Windows:强烈禁止,大概率符号链接冲突切换失效;
macOS/Linux:风险较高,建议卸载全局Node.js规避PATH冲突。
Q3:跨大版本切换是否需要删除node_modules?
同大版本小迭代:一般无需删除;
跨大版本(16→20、20→24):建议删除node_modules+锁文件重装,规避原生C++模块二进制兼容问题。
Q4:无管理员权限Windows能用nvm-windows吗?
无法执行nvm use修改系统级符号链接;备选方案:手动解压多版本Node.js,手动维护用户PATH,操作繁琐。macOS/Linux无管理员限制。
Q5:nvm、fnm、Volta怎么选型?
| 工具 | 优势 | 限制 |
|---|---|---|
| nvm | 生态成熟、资料丰富、支持离线手动导入版本 | 启动速度一般 |
| fnm | Rust编写速度快 | 离线包导入支持较差 |
| Volta | 自动感知项目版本,无需手动use | 离线部署方案薄弱 |
| 选型建议:新手/团队、企业内网优先nvm;个人追求启动速度可选fnm;多项目频繁切换追求无感体验可选Volta。 |
Q6:企业生产Node.js版本选择?
优先LTS长期支持版本,拥有30个月官方安全维护;Current前沿版本不建议直接上生产。
Q7:使用WSL、VSCode远程容器需要注意什么?
不要混用Windows主机nvm与容器/WSL内Node环境,两套PATH互通极易引发版本错乱,建议容器内部独立管理Node版本。
七、🏢 企业运维进阶方案
7.1 Windows域环境批量静默部署
batch
nvm-setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /DIR="C:\nvm" /LOG="C:\nvm_install.log"
参数说明:InnoSetup标准参数;符号链接路径无法通过安装参数指定,安装完成修改settings.txt;
⚠️
/LOG日志路径不要填写系统根目录(如C:\install.log),部分系统阻止直接写入根目录文件。
7.2 故障排查标准化SOP
where node(Windows)/which -a node(macOS/Linux)定位冲突路径- 核对PATH环境变量顺序
- 确认符号链接指向目录是否有效
- 排查后台常驻node进程占用、杀毒软件拦截
- macOS/Linux执行
nvm debug自动诊断
7.3 安全建议
- 仅官方GitHub下载安装包,杜绝第三方修改版
- 内网部署校验安装包、Node.js压缩包哈希值
- 定期升级nvm工具获取安全修复
- 生产环境约束Node.js版本范围,禁止随意切换未验证版本
📚 参考官方信源
- nvm-windows GitHub https://github.com/coreybutler/nvm-windows
- nvm-sh 官方仓库 https://github.com/coreybutler/nvm-sh/nvm
- Node.js 官方下载文档 https://nodejs.org/en/download/
- npmmirror镜像站 https://npmmirror.com/
- Microsoft Windows Node开发指南
- actions/setup-node官方文档
📌 环境配置流程图
#mermaid-svg-KAWJkVcrKHEfywdQ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-KAWJkVcrKHEfywdQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-KAWJkVcrKHEfywdQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-KAWJkVcrKHEfywdQ .error-icon{fill:#552222;}#mermaid-svg-KAWJkVcrKHEfywdQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KAWJkVcrKHEfywdQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-KAWJkVcrKHEfywdQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KAWJkVcrKHEfywdQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KAWJkVcrKHEfywdQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-KAWJkVcrKHEfywdQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KAWJkVcrKHEfywdQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KAWJkVcrKHEfywdQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KAWJkVcrKHEfywdQ .marker.cross{stroke:#333333;}#mermaid-svg-KAWJkVcrKHEfywdQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KAWJkVcrKHEfywdQ p{margin:0;}#mermaid-svg-KAWJkVcrKHEfywdQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-KAWJkVcrKHEfywdQ .cluster-label text{fill:#333;}#mermaid-svg-KAWJkVcrKHEfywdQ .cluster-label span{color:#333;}#mermaid-svg-KAWJkVcrKHEfywdQ .cluster-label span p{background-color:transparent;}#mermaid-svg-KAWJkVcrKHEfywdQ .label text,#mermaid-svg-KAWJkVcrKHEfywdQ span{fill:#333;color:#333;}#mermaid-svg-KAWJkVcrKHEfywdQ .node rect,#mermaid-svg-KAWJkVcrKHEfywdQ .node circle,#mermaid-svg-KAWJkVcrKHEfywdQ .node ellipse,#mermaid-svg-KAWJkVcrKHEfywdQ .node polygon,#mermaid-svg-KAWJkVcrKHEfywdQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KAWJkVcrKHEfywdQ .rough-node .label text,#mermaid-svg-KAWJkVcrKHEfywdQ .node .label text,#mermaid-svg-KAWJkVcrKHEfywdQ .image-shape .label,#mermaid-svg-KAWJkVcrKHEfywdQ .icon-shape .label{text-anchor:middle;}#mermaid-svg-KAWJkVcrKHEfywdQ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-KAWJkVcrKHEfywdQ .rough-node .label,#mermaid-svg-KAWJkVcrKHEfywdQ .node .label,#mermaid-svg-KAWJkVcrKHEfywdQ .image-shape .label,#mermaid-svg-KAWJkVcrKHEfywdQ .icon-shape .label{text-align:center;}#mermaid-svg-KAWJkVcrKHEfywdQ .node.clickable{cursor:pointer;}#mermaid-svg-KAWJkVcrKHEfywdQ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-KAWJkVcrKHEfywdQ .arrowheadPath{fill:#333333;}#mermaid-svg-KAWJkVcrKHEfywdQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KAWJkVcrKHEfywdQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KAWJkVcrKHEfywdQ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KAWJkVcrKHEfywdQ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-KAWJkVcrKHEfywdQ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KAWJkVcrKHEfywdQ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-KAWJkVcrKHEfywdQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KAWJkVcrKHEfywdQ .cluster text{fill:#333;}#mermaid-svg-KAWJkVcrKHEfywdQ .cluster span{color:#333;}#mermaid-svg-KAWJkVcrKHEfywdQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-KAWJkVcrKHEfywdQ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-KAWJkVcrKHEfywdQ rect.text{fill:none;stroke-width:0;}#mermaid-svg-KAWJkVcrKHEfywdQ .icon-shape,#mermaid-svg-KAWJkVcrKHEfywdQ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KAWJkVcrKHEfywdQ .icon-shape p,#mermaid-svg-KAWJkVcrKHEfywdQ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-KAWJkVcrKHEfywdQ .icon-shape .label rect,#mermaid-svg-KAWJkVcrKHEfywdQ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KAWJkVcrKHEfywdQ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-KAWJkVcrKHEfywdQ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-KAWJkVcrKHEfywdQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 仍可调用node
清理完成
版本不一致
版本正常
开始部署nvm
卸载旧Node.js+关闭应用执行别名
清理残留目录、旧符号链接+清理PATH环境变量
新开终端验证node/npm不可用
下载对应平台nvm安装包
配置国内镜像settings.txt
安装目标Node.js版本
管理员终端执行nvm use切换验证
验证IDE终端环境
重载/重启IDE
项目创建.nvmrc并配置git规范
环境部署完成
如果本文对你有帮助,欢迎点赞👍、收藏⭐、评论💬、关注➕!
个人领域:C++/java/Al/软件开发/芯片开发个人主页:「一名热衷协作的开发者,在构建中学习,期待与你交流技术、共同成长。」
座右铭:「与其完美地观望,不如踉跄地启程」













这个目录 C:\nvm4w\nodejs 是符号链接(软链接)目录
桌面通知(预览功能)
标题:作者开发进度邮件订阅(可选)



会自动识别你的系统安装对应版本

