nvm切换node版本后之前安装的yarn失效是什么原因

90 阅读2分钟

当你使用 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,一劳永逸解决版本切换导致的命令丢失问题。