重要信息:本说明档涵盖 Yarn 1(经典版)。
有关 Yarn 2+ 文档和迁移指南,请访问 yarnpkg.com。

yarn.lock

为了在不同机器上获得一致的安装结果,Yarn 需要的信息比你在 package.json 中配置的依赖项更多。Yarn 需要准确记录已经安装了各个依赖项的哪些版本。

为此,Yarn 在你的项目的根目录中使用了 yarn.lock 文件。这些“锁文件”如下所示:

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
package-1@^1.0.0:
  version "1.0.3"
  resolved "https://registry.npmjs.org/package-1/-/package-1-1.0.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
package-2@^2.0.0:
  version "2.0.1"
  resolved "https://registry.npmjs.org/package-2/-/package-2-2.0.1.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
  dependencies:
    package-4 "^4.0.0"
package-3@^3.0.0:
  version "3.1.9"
  resolved "https://registry.npmjs.org/package-3/-/package-3-3.1.9.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
  dependencies:
    package-4 "^4.5.0"
package-4@^4.0.0, package-4@^4.5.0:
  version "4.6.3"
  resolved "https://registry.npmjs.org/package-4/-/package-4-2.6.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"

这与 Bundler 或 Cargo 等其他程序包管理工具中的锁文件类似。它类似于 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 服务器)上安装完全相同的依赖项树。

框架和库的编写者还应将 yarn.lock 签入源代码管理。不必担心发布 yarn.lock 文件,因为它不会对该库的用户产生任何影响。

请参阅 https://yarn.npmjs.net.cn/blog/2016/11/24/lockfiles-for-all/