Yarn 入门指南:可预期的依赖管理
Yarn 以并行下载、离线缓存与确定性锁文件革新了包管理。本文讲解安装、依赖管理、锁文件机制与现代 Yarn(Berry)的变化。
Yarn 的核心价值是确定性:yarn.lock 锁定完整依赖树,团队与 CI 安装结果一致。常用命令与 npm 对应(yarn add/remove/install)。现代项目建议对比 pnpm 后选择——pnpm 的磁盘效率与严格结构更优。
安装与基础
corepack enable # Node 16+ 内置的包管理器管理器
corepack prepare yarn@stable --activate
yarn init -y
yarn add lodash
yarn add -D typescript
yarn install
yarn remove lodash
yarn upgrade
依赖管理的确定性
yarn.lock 记录每个包的精确版本与内容哈希——任何机器任何时间装出的依赖树完全一致。CI 用 yarn install --frozen-lockfile 拒绝锁文件漂移。
Yarn Berry(现代版)的变化
Yarn 2+(Berry)引入 PnP(Plug'n'Play):抛弃 node_modules,依赖直接映射到全局缓存——安装更快、更严格。兼容性问题让 PnP 采用有限,多数 Berry 用户用 nodeLinker: node-modules 模式。
与 npm/pnpm 的位置
| 维度 | npm | Yarn | pnpm |
|---|---|---|---|
| 存储特点 | 常规 node_modules | 支持 PnP 或 node_modules | 内容寻址存储与链接 |
| 磁盘效率 | 低 | 低 | 高 |
| 幻影依赖防护 | 弱 | 弱 | 强 |
| Monorepo | workspaces | workspaces | workspaces 最强 |
常见问题(FAQ)
Q:Yarn Classic(1.x)还能用吗?
维护模式——存量继续,新项目用 Yarn Berry 或直接 pnpm。
Q:Corepack 是什么?
Node 内置的"包管理器版本管理器":package.json 的 packageManager 字段声明版本,corepack 自动切换——团队统一包管理器版本的标准方案。
Q:Yarn 和 pnpm 怎么选?
新项目建议 pnpm(见本系列《PNPM 入门》):磁盘效率与严格依赖结构是实打实的工程优势;Yarn 的 PnP 愿景好但生态摩擦大。
参考文档
本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。