为什么在package.json中增加版本后运行yarn安装时,我的yarn.lock文件会更改?

时间:2019-07-31 17:34:14

标签: yarnpkg yarn-lock.json

我已经阅读了有关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的正确方法吗?

1 个答案:

答案 0 :(得分: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,但是概念是相同的。