NPM 和yarn.lock

JeB*_*JeB 6 node.js npm yarnpkg

自 NPM v7 以来,官方文档声明了以下内容npm install(强调我的):

此命令安装一个包及其依赖的任何包。如果包有包锁、npm Shrinkwrap 文件或纱线锁文件,则依赖项的安装将由该文件驱动

我试图找到更多关于npm install当下行为的信息yarn.lock,但没有找到太多。这篇博文指出:

通过新package-lock.json文件,我们将解锁执行确定性可重现构建的能力。它现在应该包含 npm 安装所需软件包所需的所有内容。之前 npm 7yarn.lock被 npm 忽略,但现在不再是这样了。现在,它可以使用它来使自己保持最新的包树。

GitHub博客

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

但他们都没有清楚地说明我运行时实际发生的npm install情况yarn.lock

我想了解一下它:

  • 我可以在本地运行yarn来生成yarn.lock和重现 CI 上的包树吗npm install
  • npm install当我运行时到底会发生什么yarn.lock?它会更新吗?它可以用(某种)运行吗--frozen-lockfile?该命令根本npm ci没有提及。yarn.lock
  • 它支持 和v1berry

小智 6

\n

我可以在本地运行yarn来生成yarn.lock并使用npm install在CI上重现包树吗?

\n
\n

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

\n

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

\n
\n

当我使用yarn.lock运行npm install时到底会发生什么?它会更新吗?它可以与(某种)--frozen-lockfile 一起运行吗?npm ci 命令根本没有提到yarn.lock。

\n
\n

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

\n

根据这篇 NPM 博客文章,他们还不支持yarn.lock 文件的原因是

\n
\n

一旦我们宣布 npm v7 将包含对yarn.lock 文件的支持,我们 \xe2\x80\x99 现在已经多次遇到的一个常见问题是 \xe2\x80\x9c 那么为什么要保留 package-lock.json 呢?为什么不只使用yarn.lock?\xe2\x80\x9d

\n
\n
\n

简单的答案是:因为yarn.lock并没有\xe2\x80\x99s完全满足npm\xe2\x80\x99s的需求,并且完全依赖它会限制我们将来生成最佳包安装或添加功能的能力。

\n
\n

最后,

\n
\n

它同时支持 v1 和 berry 吗?

\n
\n

这尚不清楚,并且暗示要更改,因为berry纱线使用文件和纱线版本的组合yarn.lock来保证确定性分辨率。

\n

我建议阅读这篇博文以及上面来自npm的文章,以获得更深入的解释。

\n\n