问题

解决
# 让 nvm 自动把 symlink 的路径永久加入系统 PATH(机器级)
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\nodejs", "Machine")
# 再刷新一次
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
最终
- 把电脑上所有相关的node环境变量全部删除
- 卸载 nvm 和 node 重新安装
这是 Windows 上使用 nvm-windows(也就是 coreybutler/nvm-windows)最常见的坑之一。你用 .exe 安装的 Node 18.19.0 是全局安装的(放在 C:\Program Files\nodejs 目录下),而 nvm-windows 管理的 Node 版本是通过符号链接(symlink)来切换的,链接目标是 C:\Program Files\nodejs。当系统中已经存在一个“真·nodejs”文件夹时,nvm use 经常会失败(表面说成功,但实际上没切换成功),因为它无法覆盖或正确管理那个文件夹。最有效、最常见的解决办法(按优先级推荐)
方案1:彻底删除全局安装的 Node.js(推荐)去「控制面板 → 程序和功能」,找到 “Node.js”,卸载它。
手动删除残留文件夹(很重要!):C:\Program Files\nodejs (整个文件夹删掉)
C:\Program Files (x86)\nodejs (如果有,也删)
C:\Users\你的用户名\AppData\Roaming\npm
C:\Users\你的用户名\AppData\Roaming\npm-cache
关闭当前命令行窗口,重新打开一个新的 CMD 或 PowerShell(最好以管理员身份打开)。
再执行:
nvm list
nvm use 22.12.0
node -v
这次应该就能正确显示 v22.12.0 了。
方案2:不卸载全局 Node,但临时让 nvm 能覆盖(次选)把 C:\Program Files\nodejs 改个名字(比如改成 nodejs_backup)
然后执行 nvm use 22.12.0
如果成功了,以后想用 18.19.0 就 nvm use 18.19.0(nvm 会重新创建链接)
但长远建议还是方案1,保持系统只有一个 Node 来源(由 nvm 管理),避免混乱。其他小技巧 / 检查点确认你用的是 nvm-windows,不是 linux/mac 的 nvm(你提到 nvm use 22,应该就是 windows 版)
命令行要新开一个窗口,旧窗口的环境变量不会自动更新
如果你用的是 PowerShell / Git Bash / VS Code 终端,也要重新打开
执行 nvm use 后可以再运行 nvm list 看是否有 * 号标记在 22.12.0 前面
如果还是不行,试试以管理员身份运行 CMD 再 nvm use
项目里推荐的更好做法(避免每次手动 use)在你的 Vue 项目根目录新建一个文件叫 .nvmrc,内容只写一行:
22.12.0
以后进入项目目录,直接运行:
nvm use
它就会自动读取 .nvmrc 里的版本(超级方便)。照着方案1走一遍,99% 的人都能解决。试完告诉我结果~
