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/。