当拷贝一个开源代码,或者自己用 Yarn 搭建一个前端项目,屡次被版本坑到了,但是之前了解过区别,毕竟 Yarn 到 2.x 之后名字都叫 berry 了。所以搞懂版本关系,以防遇到某些开源项目,跟自己本地版本不一致搞晕了
先说踩坑结论:
目前我本地是用的 3.8.7,因此在使用 yarn install
不会有 node_modules
依赖存储在 .yarn/cache
中,并且默认是 PnP 模式,因此跑低版本传统node_modules
会跑不起来
拿到开源项目,判断他们使用的什么模式很重要,例如:
项目中没有 .pnp.js
或 .pnp.cjs
文件
没有 .yarn
文件夹结构
如果项目是传统模式,自己本地是高版本,两种解决办法:
切换自己本地 yarn 版本到低版本,切换回之前的 Yarn 版本(例如 1.x),可以运行:
1
volta install yarn@1
我本地是用了 volta,所以这样切换语法:
1
volta install yarn@<版本号>
项目级别配置(推荐)
在项目根目录创建或修改.yarnrc.yml
文件,终端执行如下命令:1
2# 在项目目录中执行
echo 'nodeLinker: node-modules' > .yarnrc.yml然后重新安装依赖:
1
yarn install
1. Yarn 版本历史简介
Yarn 的版本可以分为以下几个阶段:
- Yarn 1.x:经典版本,基于
node_modules
的依赖管理。 - **Yarn 2.x (Berry)**:引入了 Plug’n’Play (PnP)、Workspaces 优化等新特性。
- Yarn 3.x:在 2.x 基础上进一步优化性能和稳定性。
- Yarn 4.x:最新版本,提供了更好的性能、开发者体验和兼容性。
2. Yarn 1.x vs Yarn 2.x/3.x/4.x 的主要区别
Yarn 1.x
- 依赖管理:基于
node_modules
,依赖会被解压到node_modules
文件夹中。 - 安装速度:相对较慢,尤其是在大型项目中。
- 功能:支持 Workspaces,但功能较为基础。
- 兼容性:与大多数工具和框架兼容。
Yarn 2.x/3.x/4.x
- 依赖管理:
- 默认使用 **Plug’n’Play (PnP)**,依赖存储在
.yarn/cache
中,不生成node_modules
。 - 支持
nodeLinker: node-modules
切换回传统模式。
- 默认使用 **Plug’n’Play (PnP)**,依赖存储在
- 安装速度:显著提升,尤其是在大型项目中。
- 功能:
- 改进的 Workspaces 支持。
- 新增
yarn dlx
命令(类似于npx
)。 - 更好的 Monorepo 支持。
- 兼容性:
- PnP 可能需要额外配置才能兼容某些工具(如 Babel、Webpack)。
- Yarn 4.x 对工具链的兼容性更好。
扩展知识点
我之前博客提到了我使用 yarn4.x版本,创建项目,用了一个命令
1 | yarn dlx @yarnpkg/sdks vscode |
解释:yarn dlx @yarnpkg/sdks vscode
命令用于为使用 Yarn 2+ (Berry) 的项目配置 VS Code 编辑器支持。 这个命令会在项目中生成 VS Code 特定的配置文件,使编辑器能够正确理解 Yarn 的 Plug’n’Play (PnP) 依赖管理系统。 它生成的配置能确保 VS Code 中的 TypeScript、ESLint 等工具可以正确找到项目依赖,从而提供代码补全、类型检查等功能。 执行后,它会在 .yarn/sdks
目录中创建必要的配置文件,并可能会提示你允许 VS Code 使用这些工作区特定的配置