为什么在增加 package.json 中的版本后运行 yarn install 时我的 yarn.lock 文件会发生变化?

Mic*_*ael 5 yarnpkg yarn-lock.json

我已经通读了有关 yarn 命令和 yarn.lock 的文档,我相信 yarn.lock 文件的全部意义在于使用该文件中指定的版本。

我很好奇的是:yarn.lock 中指定的版本什么时候实际使用?我在 package.jsonyarn install和 reran 中手动更改了一个包的版本,并且更新了 yarn.lock 文件以使用新版本。我认为它会被锁定,因此在 package.json 中指定什么新版本并不重要,只要 yarn.lock 为该包指定了一个版本,它就会使用旧版本。

如果这就是 yarn.lock 应该如何工作,那么为什么不在 package.json 中指定 EXACT 版本,而不是在版本号前面使用 ~ 或 ^ 。现在我必须这样做,以便在运行时不更改 yarn.lock 文件yarn install

那么什么时候真正使用锁定版本/这是使用yarn.lock的正确方法吗?

bit*_*uit 1

如果更改 package.json 中的依赖项版本,锁定文件将更新以反映这一点。锁定文件的目的有两个。第一,允许您(和您的同事)使用您知道可以工作并且已经过测试的依赖项版本。第二,依赖项作者指定要使用的依赖项的依赖项版本。这里的目标是稳定。

如果您想尝试一下并了解锁定文件的用途,请创建您自己的 npm 模块并使用 v1.0.0 将其推送到 npm 注册表。然后在您的项目中,将此模块添加为类似“myModule”:“1.xx”的依赖项。如果您现在要安装模块,您将拥有“myModule v1.0.0”,并且您的锁定文件将反映这一点。

现在将模块更新到 v1.1.0,然后再次安装模块。此时,如果您没有锁定文件,您将获得“myModule v1.1.0”。,但因为锁定文件就像您的依赖关系树的快照,所以您将坚持使用“myModule v1” .0.0”。当然,如果您删除锁定文件,则会生成一个新的“myModule v1.1.0”文件。同样,更新 package.json 也会更新锁定文件。

  • 请注意,我给出的示例是针对 npm 而不是yarn,但概念是相同的。

  • 问题是,当前“yarn install”确实会更改“yarn.lock”,即使您不触及“package.json”。刚刚从 Node.js 13 迁移到 14 时看到了这种情况发生。 (20认同)
  • 但你没有告诉他/她任何新的东西。这个@bitscuit 声称yarn install 仍然会覆盖他当前的版本。 (3认同)