Yarn 的零安装功能是怎么让团队不用跑 install 的?
1. 把安装产物提交到版本控制
- 零安装(Zero Installs)的核心思路是:将所有安装产物纳入版本控制,克隆仓库后即具备运行项目的全部文件,无需执行 yarn install
- 切换分支时,版本控制系统在 checkout 的同时也就完成了依赖的更新
- 这一模式尤其适合高速迭代的项目,能避免因忘记重装依赖而导致工具崩溃的问题
2. 依赖 Plug'n'Play 与离线缓存两个特性
- 单纯提交 node_modules 不可行——其中包含成千上万个文件,频繁增删依赖时会被随意移动,产生巨大的 diff
- Yarn 的做法是:在 Plug'n'Play 模式下生成单一的 .pnp.cjs 映射文件,并把离线缓存(.yarn/cache)提交到仓库
- 由于 PnP 加载器的内容在任何机器上都完全相同,且离线缓存包含了加载器引用的所有文件,git checkout 实际上就等价于一次"准安装"
3. 适用边界与注意事项
- 添加或删除带有原生依赖(native dependencies)的包时,仍需运行 yarn install,因为这类包依赖的文件无法像 Node.js 脚本那样直接从 zip 归档中求值
- 这类包在实践中较少见、更新也不频繁,且 Yarn 会在遗忘时给出明确的错误提示
- 建议将缓存文件以未压缩形式存储,因为实测显示未压缩状态下的仓库体积反而更小、Git 的 delta 计算也更高效