WSL PATH 混用 Windows Node/npm 问题说明

问题现象

在 WSL 中使用 Node / npm / pnpm 时,可能出现以下情况:

pnpm 指向 Windows 路径:

/mnt/c/Users/w/AppData/Roaming/npm/pnpm
1
which pnpm

npm 可以使用,但 node 不存在:

Terminal window
1
npm -v # 正常输出版本号
2
node -v # Command 'node' not found

执行 pnpm 报错:

1
exec: node: not found

问题原因

WSL 默认会继承 Windows 的 PATH,导致:

  • Windows 的 Node/npm 路径排在前面
  • WSL 调用了 Windows 的 pnpm
  • 但 WSL 内没有对应的 node 运行环境

从而产生环境冲突。


解决方案(推荐)

在 WSL 中使用 nvm 安装独立 Node 环境

1. 安装并加载 nvm

Terminal window
1
export NVM_DIR="$HOME/.nvm"
2
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

2. 安装 Node

Terminal window
1
nvm install --lts
2
nvm use --lts

3. 刷新命令缓存

Terminal window
1
hash -r

4. 验证环境

Terminal window
1
which node
2
which npm
3
node -v && npm -v

正确结果应类似:

1
/home/w/.nvm/versions/node/v22.x.x/bin/node
2
/home/w/.nvm/versions/node/v22.x.x/bin/npm

5. 重新安装 pnpm

Terminal window
1
npm install -g pnpm

验证:

Terminal window
1
which pnpm
2
pnpm -v

路径应位于:

1
/home/w/.nvm/versions/node/v22.x.x/bin/pnpm

持久化配置

默认情况下,新开终端后 nvm 可能失效。将初始化脚本写入 ~/.bashrc(或 ~/.zshrc)以永久生效:

Terminal window
1
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
2
echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' >> ~/.bashrc
3
source ~/.bashrc

可选:禁用 Windows PATH 继承

如需从根本上隔离 WSL 与 Windows 环境,可编辑 /etc/wsl.conf

1
[interop]
2
appendWindowsPath = false

然后重启 WSL:

Terminal window
1
wsl --shutdown

⚠️ 注意:此设置会导致无法在 WSL 中直接调用 Windows 工具(如 explorer.execode 等),请按需选择。


最终验证

确保以下命令均来自 WSL 本地环境:

Terminal window
1
which node
2
which npm
3
which pnpm

路径应全部指向:

1
/home/w/.nvm/versions/node/v22.x.x/bin/