当你使用 nvm 切换 Node.js 版本后,发现之前安装的 Yarn 失效(例如运行 yarn 命令报错 command not found),这是一个非常常见的问题。其根本原因如下:
🔍 原因:Yarn 通常是通过 npm 安装的,而 npm 的全局模块是按 Node.js 版本隔离的
nvm 为每一个 Node.js 版本维护独立的全局模块目录。也就是说:
- 当你使用
node v16时,通过npm install -g yarn安装的 Yarn,是安装在node v16的全局目录下。 - 当你切换到
node v18后,这个版本的 Node 的全局目录是全新的、空的,所以找不到yarn。
👉 所以你不是“丢失”了 Yarn,而是切换 Node 版本后进入了另一个“独立环境”。
✅ 解决方案
✅ 方法一:在当前 Node 版本中重新安装 Yarn(推荐)
npm install -g yarn
安装完成后,运行:
yarn -v
即可正常使用。
⚠️ 注意:你需要在每一个你使用的 Node 版本中都执行一次这个命令,才能在该版本下使用 Yarn。
✅ 方法二:使用独立于 Node 的 Yarn 安装方式(推荐长期使用)
为了避免每次切换 Node 都要重装 Yarn,建议使用 不依赖 npm 的安装方式:
推荐方式 1:使用官方推荐的安装脚本
curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
或使用 Homebrew(推荐):
推荐方式 2:使用 Homebrew 安装 Yarn(最稳定)
# 如果没装 Homebrew,先安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装 Yarn
brew install yarn
✅ 这种方式安装的 Yarn 是系统级的,不依赖 Node 版本,无论你怎么用 nvm 切换 Node,Yarn 都能正常使用。
✅ 验证 Yarn 安装路径
你可以运行:
which yarn
- 如果输出类似
/Users/xxx/.nvm/versions/node/v16.14.0/bin/yarn→ 说明是 npm 安装的,会随 Node 版本切换而“消失”。 - 如果输出类似
/usr/local/bin/yarn或/opt/homebrew/bin/yarn→ 说明是系统级安装,不受 nvm 影响。
✅ 额外建议
- 使用
nvm管理 Node 版本。 - 使用
brew管理全局工具(如yarn,pnpm,typescript等),避免重复安装和环境混乱。
✅ 总结
| 原因 | 解决方案 |
|---|---|
Yarn 是通过 npm install -g yarn 安装的,全局模块随 Node 版本隔离 | 在新 Node 版本中重新运行 npm install -g yarn |
| 想彻底避免问题 | 使用 brew install yarn 安装系统级 Yarn |
🔧 推荐:使用 Homebrew 安装 Yarn,一劳永逸解决版本切换导致的命令丢失问题。