首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NPM与yarn.lock

NPM与yarn.lock
EN

Stack Overflow用户
提问于 2022-07-04 08:06:59
回答 3查看 1.7K关注 0票数 4

自NPM v7以来,官方文档npm install (强调文档)作了如下说明:

此命令安装包和它所依赖的任何包。如果包有包锁,或npm收缩包文件,或纱锁文件,则依赖项的安装将由该文件驱动。

我试图在npm install中找到更多关于yarn.lock行为的信息,但没有找到多少信息。博客文章指出:

使用新的package-lock.json文件,我们将解锁完成决定性的可复制构建的能力。现在,它应该包括npm安装所需软件包所需的一切。在npm 7之前,yarn.lock被npm忽视了,但现在已经不是这样了。现在,它可以使用它来更新包树。

GitHub 博客

在以前的版本中,yarn.lock文件被忽略,npm现在可以使用yarn.lock作为包元数据和解析指导的来源。如果存在一个yarn.lock文件,那么npm也将使它与包树的内容保持最新。

但是,它们都没有清楚地描述我在使用npm install运行yarn.lock时实际发生了什么。

我想了解一下:

  • 我可以在本地运行yarn来生成yarn.lock并使用npm install在CI上再现包树吗?
  • 当我使用npm install运行yarn.lock时,会发生什么?有更新吗?它能与(某种程度上) --frozen-lockfile一起运行吗?npm ci命令根本没有提到yarn.lock
  • 它支持v1berry吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-07-17 12:02:44

我是否可以在本地运行纱线以生成yarn.lock,并在CI上通过npm安装复制包装树?

不,如果要使用npm package-lock.json再现包树,仍然需要一个v7文件。v7只使用yarn.lock文件作为包元数据和解析指南源。

这是因为npm v7使用新的lockFileVersion: 2 (向后兼容)生成锁文件,以提高性能并允许具有确定性树形的可重复构建;它还试图减少对元数据的package.json文件的读取。

当我使用yarn.lock运行npm安装时,会发生什么?有更新吗?它能用(某种程度上)--冻结-锁文件运行吗?npm命令根本没有提到yarn.lock。

是的,yarn.lock文件将被更新,npm仍将创建一个package-lock.json文件,如果存在package-lock.json文件,它将用作要创建的树形状的权威定义。

按照这篇NPM博客文章的说法,他们不支持yarn.lock文件的原因是

当我们宣布npm v7将包括对yarn.lock文件的支持时,我们现在得到的一个常见问题是:“那么,为什么要保留package-lock.json呢?”为什么不只使用yarn.lock呢?“简单的答案是:因为yarn.lock没有完全满足npm的需求,而完全依赖它将限制我们在未来产生最佳包安装或添加特性的能力。

最后,

它既支持v1也支持浆果吗?

这是不清楚的,并暗示改变的berry,因为纱线使用yarn.lock文件和纱线版本的组合,以确保确定的分辨率。

我建议阅读这个博客和上面的文章从npm获得更深入的解释。

票数 3
EN

Stack Overflow用户

发布于 2022-07-16 15:05:38

既然您已经做了这么多的研究,而且进一步的文档搜索似乎无法缓解您的不确定性,那么为什么不采取今后的步骤来查看源代码呢?不要害怕读代码

所以,我对回购https://github.com/npm/cli做了个肤浅的搜索,发现这个文件可以回答你的问题。

为了外卖,

我是否可以在本地运行yarn来生成yarn.lock,并在CI上使用npm安装再现包树?

是的,除非您使用的一些协议只属于berry,不受npm的支持。

当我使用yarn.lock运行npm安装时,会发生什么?有更新吗?它能用(某种程度上)--冻结-锁文件运行吗?npm命令根本没有提到yarn.lock。

  1. 当您运行npm i时,yarn.lock将得到更新。至少它会进行一些格式化更改,并覆盖注册表URL。如果npm无法找到已解析的包版本或已解析版本无效,它将从注册表中获取该版本,并在package-lock.jsonyarn.lock中进行更新。
  2. npm ci需要package-lock.json,否则它会立即退出

它既支持v1也支持浆果吗?

它对berry不起作用。npm将用纱线锁文件v1的格式覆盖yarn.lock

票数 2
EN

Stack Overflow用户

发布于 2022-07-17 07:04:38

这个文档应该有助于解释一点:https://blog.npmjs.org/post/621733939456933888/npm-v7-series-why-keep-package-lockjson.html#:~:text=While%20npm%20uses%20the%20yarn,t%20ideal%20in%20these%20cases

这个链接解释了一些关于纱线和npm交互的想法,即您从npm切换到纱线,所以有点相反,但比较命令(CI)列表可能很有趣:https://classic.yarnpkg.com/lang/en/docs/migrating-from-npm/

除了Yarn之外,我不太了解它的不同之处,只是安装得更快,而且包的构建有点不同。找不到医生解释为什么要转到国家预防机制。启动npm之前删除yarn.lock。否则,见上面的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72853529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档