如何在 Windows 上卸载 nvm-windows
nvm-windows 把 Node.js 各个版本管理在自己的安装目录下,还会往 PATH 里加一条,卸载它不会连带删掉它自己装的那些 Node 版本。这份指南覆盖用 CoreyButler.NVMforWindows winget 包按用户安装的 nvm-windows。
先退出正在用 Node 的窗口
关掉正在用 nvm 管理的某个 Node 版本跑进程的终端。卸载前在任务管理器(Ctrl+Shift+Esc)里确认没有 nvm.exe 或 node.exe 还在。
用自带的卸载器移除应用
打开「设置 › 应用 › 已安装的应用」,找到 NVM for Windows,选择卸载,或者运行:
winget uninstall --id CoreyButler.NVMforWindows
数据分别在哪里
| 位置 | 里面是什么 | 如何处理 |
|---|---|---|
%LOCALAPPDATA%\Author Software\nvm |
nvm-windows 程序本体、设置文件,还有你用 nvm install 装的每个 Node 版本 |
卸载器会整个删掉,某个 Node 版本下装过的全局 npm 包先自己备份 |
%ProgramData%\Author Software\nvm\logs |
一个很小的运行日志文件 | 卸载器不会动,可以删 |
检查结果
卸载完成后运行下面几条只读命令,最好开个新终端窗口:
nvm version
winget list --id CoreyButler.NVMforWindows
Test-Path "$env:LOCALAPPDATA\Author Software\nvm"
$env:Path -split ';' | Select-String 'nvm'
nvm version报「无法识别」,说明 nvm-windows 已经从 PATH 里没了;打印出版本号,说明卸载没完成,或者机器上还有另一个安装。winget list正常完成且没有匹配,才说明包记录已经没了;列出一行,说明卸载没完成。Test-Path "$env:LOCALAPPDATA\Author Software\nvm"返回False,说明安装目录连同 Node 版本都没了;返回True,说明还在。- 最后一条命令列出一行,说明用户 PATH 里还留着 nvm 那条,Mole 不会去改 PATH,想清掉自己去「设置 › 系统 › 关于 › 高级系统设置 › 环境变量」删。
用 winget 安装时
winget uninstall 运行的是「设置 › 应用」用的同一个 Inno Setup 卸载器(unins000.exe /SILENT),删的是同一个安装目录,不会动日志文件夹或用户 PATH。
Mole 会列出什么
对按用户安装的 winget 版 nvm-windows:
- 安装目录、用户开始菜单文件夹(里面还有个
Sync.lnk快捷方式)和桌面快捷方式默认勾选。 HKCU\SOFTWARE\Classes下的nvm协议登记默认勾选,删除前先备份成.reg文件。%ProgramData%\Author Software\nvm\logs不在这张列表里。nvm-windows 加的用户 PATH 条目 Mole 不会去改。
这次检查覆盖了什么
测试的是 arm64 Inno Setup 版 nvm-windows 2.0.0,按用户安装。因为测试是在提权环境里跑的,这个按用户的卸载器第一次先报了个 ShellExecuteEx 错误,重试时又要了一次管理员权限,普通的按用户安装和卸载不会遇到这两种情况。测试过程中没有用 nvm 装过任何 Node 版本。
