Windows10 PowerShell下Yarn与npm版本不同步且无法卸载旧npm求助
解决思路与步骤
你的问题核心是系统PATH环境变量的优先级导致默认调用了Node.js 6自带的旧版本npm,而Yarn是直接调用了它全局安装的npm路径。下面是具体的解决方法:
1. 确认PATH路径优先级
首先打开PowerShell,执行以下命令查看当前的环境变量路径:
$env:PATH
你会看到一长串路径,重点找两个关键位置:
- Node.js自带npm的路径:通常是
C:\Program Files\nodejs\(Node.js安装时会把npm.cmd放在这个目录下) - Yarn全局安装npm的路径:就是你看到的
C:\WINDOWS\system32\node_modules\.bin
如果Node.js的路径排在Yarn的路径前面,直接输入npm时,系统会优先调用Node自带的旧版本npm。
2. 调整PATH路径顺序(根本解决方法)
- 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 在「系统变量」或「用户变量」中找到
PATH变量,点击「编辑」 - 在编辑界面,把Yarn的npm路径(
C:\WINDOWS\system32\node_modules\.bin)拖动到Node.js路径(C:\Program Files\nodejs\)的前面 - 保存所有设置,关闭所有PowerShell窗口后重新打开,再执行
npm --version,应该就能看到4.6.1了
3. 用PowerShell别名临时/永久覆盖(备选方案)
如果不想调整PATH,也可以给npm命令设置别名,让它直接指向Yarn安装的版本:
- 临时生效(仅当前PowerShell会话):
New-Alias -Name npm -Value "C:\WINDOWS\system32\node_modules\.bin\npm" - 永久生效(所有PowerShell会话):
- 执行以下命令创建/打开PowerShell配置文件:
if (-not (Test-Path $PROFILE)) { New-Item -Path $PROFILE -Type File -Force } notepad $PROFILE - 在打开的记事本中加入下面一行内容,保存后关闭:
New-Alias -Name npm -Value "C:\WINDOWS\system32\node_modules\.bin\npm" - 重启PowerShell,别名就会自动生效
- 执行以下命令创建/打开PowerShell配置文件:
补充说明
Node.js 6默认自带的npm 3.10.10是和Node绑定在一起的,所以你之前执行的npm uninstall npm -g只能卸载后来全局安装的版本,无法移除Node自带的那个。通过调整PATH优先级或者设置别名,就能让系统优先使用Yarn安装的npm版本,实现Yarn和npm的版本同步。
内容的提问来源于stack exchange,提问作者thrave




