【问题标题】:Why is my yarn.lock file changing when running yarn install after incrementing version in package.json?为什么在 package.json 中增加版本后运行 yarn install 时我的 yarn.lock 文件会发生变化?
【发布时间】:2019-12-09 07:05:35
【问题描述】:

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

我很好奇的是:yarn.lock中指定的版本是什么时候实际使用的?我在 package.json 中手动更改了一个包的版本,并重新运行yarn install,并更新了 yarn.lock 文件以使用新版本。我以为它会被锁定,所以package.json中指定了什么新版本无关紧要,只要yarn.lock为那个包指定了一个版本,它就会使用那个旧版本。

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

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

【问题讨论】:

    标签: yarnpkg yarn-lock.json


    【解决方案1】:

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

    如果你想试试看锁文件的用途,创建一个你自己的 npm 模块并将其推送到 v1.0.0 的 npm 注册表。然后在您的项目中,将此模块添加为具有类似“myModule”的依赖项:“1.x.x”。如果您现在要安装模块,您将拥有“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 时看到了这种情况。
    • 但是你没有告诉他/她任何新的东西。这个@bitscuit 声称 yarn install 仍然会覆盖他当前的版本。
    【解决方案2】:

    关于 github 问题 here 的讨论很长。 TLDR;问题似乎在modern yarn 中得到解决。

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 2022-11-11
      • 2018-07-31
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2010-11-09
      • 2017-03-31
      相关资源
      最近更新 更多