为了跨机器安装得到一致的结果,Yarn 需要比你配置在 package.json 中的依赖列表更多的信息。 Yarn 需要准确存储每个安装的依赖是哪个版本。

为了做到这样,Yarn 使用一个你项目根目录里的 yarn.lock 文件。这些 “lockfile” 看起来像这样的:

  1. # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
  2. # yarn lockfile v1
  3. package-1@^1.0.0:
  4. version "1.0.3"
  5. resolved "https://registry.npmjs.org/package-1/-/package-1-1.0.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
  6. package-2@^2.0.0:
  7. version "2.0.1"
  8. resolved "https://registry.npmjs.org/package-2/-/package-2-2.0.1.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
  9. dependencies:
  10. package-4 "^4.0.0"
  11. package-3@^3.0.0:
  12. version "3.1.9"
  13. resolved "https://registry.npmjs.org/package-3/-/package-3-3.1.9.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
  14. dependencies:
  15. package-4 "^4.5.0"
  16. package-4@^4.0.0, package-4@^4.5.0:
  17. version "4.6.3"
  18. resolved "https://registry.npmjs.org/package-4/-/package-4-2.6.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"

这可以媲美其他像 Bundler 或 Cargo 这样的包管理器的 lockfiles。它类似于 npm 的 npm-shrinkwrap.json,然而他并不是有损的并且它能创建可重现的结果。

用 Yarn 管理

你的 yarn.lock 文件是自动产生的,而且应该完全被 Yarn 管理。 当你用 Yarn CLI 增加/升级/删除依赖,它将自动更新你的 yarn.lock 文件。 不要直接编辑这个文件,那样很容易弄坏某些东西。

只用于当前包

安装期间 Yarn 将只使用顶级 yarn.lock 文件,并会忽略任何依赖里面的 yarn.lock 文件。 顶级 yarn.lock 包含 Yarn 需要锁定的整个依赖树里全部包版本的所有信息。

提交到版本控制系统

所有 yarn.lock 文件应该被提交到版本控制系统(例如 git 或者 mercurial)。 这允许 Yarn 跨所有机器安装相同的依赖树,无论它是你同事的笔记本还是 CI 服务器。

Framework and library authors should also check yarn.lock into source control. 别担心发布 yarn.lock 文件,因为它对库的用户不会有任何作用。

See https://yarnpkg.com/blog/2016/11/24/lockfiles-for-all/.

原文: https://yarnpkg.com/zh-Hans/docs/yarn-lock