由于NPM v7,官方文档对npm install
(强调矿)进行了以下说明:
此命令安装程序包及其依赖的任何程序包。如果程序包具有程序包锁、npm收缩包文件或纱线锁文件,则依赖项的安装将由该驱动
我试图在yarn.lock
存在的情况下找到有关npm install
行为的更多信息,但没有找到太多。这篇博客文章说:
有了新的
package-lock.json
文件,我们将解锁进行确定性可复制构建的能力。它现在应该包括npm安装所需软件包所需的一切。在npm 7之前,yarn.lock
被npm忽略,但现在已经不是这样了。它现在可以使用它来使自己与包树保持最新。
GitHub博客:
在以前的版本中,yarn.lock文件被忽略,npm CLI现在可以使用yarn.lok作为包元数据和解析指南的来源。如果存在
yarn.lock
文件,则npm还会使其与包树的内容保持最新。
但它们都没有清楚地说明当我使用yarn.lock
运行npm install
时实际发生了什么。
我想了解一下:
- 我可以在本地运行
yarn
来生成yarn.lock
,并使用npm install
在CI上复制包树吗 - 当我使用
yarn.lock
运行npm install
时,会发生什么?它更新了吗?它能用(某种)--frozen-lockfile
运行吗?npm ci
命令根本没有提到yarn.lock
- 它同时支持
v1
和berry
吗
我可以在本地运行yarn.lock并使用npm install在CI上复制包树吗?
否,如果要使用npm v7复制包树,则仍然需要一个package-lock.json
文件。v7仅使用yarn.lock文件作为包元数据的源和解析指南。
这是因为npmv7使用新的lockFileVersion: 2
(向后兼容)生成锁定文件,以提高性能并允许具有确定性树形的可复制构建;它还试图减少从CCD_ 21文件对元数据的读取。
当我使用yarn.lock运行npm安装时,会发生什么?它更新了吗?它能用(某种)冻结的锁定文件运行吗?npm-ci命令根本没有提到yarn.lock。
是的,yarn.lock
文件将被更新,npm仍将创建一个package-lock.json
文件,如果存在package-lock.json
文件,它将被用作要创建的树形的权威定义。
根据NPM的博客文章,他们还不支持yarn.lock文件的原因是
当我们宣布npm v7将支持yarn.lock文件时,我们已经多次遇到一个常见的问题,那就是"为什么要保留package-lock.json?为什么不只使用yarn.lok?">
简单的答案是:因为yarn.lock不能完全满足npm的需求,完全依赖它会限制我们在未来进行最佳软件包安装或添加功能的能力。
最后,
它同时支持v1和berry吗?
这一点尚不清楚,并且暗示对berry
进行更改,因为yarn使用yarn.lock
文件和yarn版本的组合来保证确定性分辨率。
我建议阅读这篇博客文章以及以上来自npm的文章,以获得更深入的解释。
既然你已经做了这么多研究,而且进一步的文档搜索似乎不会减轻你的不确定性,为什么不在未来采取措施查看源代码呢?不要害怕阅读代码
所以,我对回购做了一个肤浅的搜索https://github.com/npm/cli发现这个文件可以回答你的问题
对于外卖,
我可以在本地运行
yarn
来生成yarn.lock
,并使用npm安装在CI上重现包树吗?
是,除非您使用某些仅属于berry
且不受npm 支持的协议
当我使用yarn.lock运行npm安装时,会发生什么?它更新了吗?它能用(某种)冻结的锁定文件运行吗?npm-ci命令根本没有提到yarn.lock。
- 运行
npm i
时,yarn.lock
将得到更新。至少它会更改一些格式并覆盖注册表URL。如果npm
找不到包的解析版本或解析版本无效,它将从注册表中获取该包,并在package-lock.json
和yarn.lock
中进行更新 npm ci
需要package-lock.json
,否则会立即退出
它同时支持v1和berry吗?
它不能很好地与berry
配合使用。npm
将用纱线锁定文件v1 的格式覆盖yarn.lock
这个文档应该有助于解释:https://blog.npmjs.org/post/621733939456933888/npm-v7-series-why-keep-package-lockjson.html#:~:text=当%20npm%20使用%20th%20纱线时,t%20理想%20in%20这些%20情况。
这个链接解释了一些关于yarn和npm交互的想法,即从npm切换到yarn,所以有点相反,但可以查看一系列有趣的比较命令(CI):https://classic.yarnpkg.com/lang/en/docs/migrating-from-npm/
我不太了解区别,除了Yarn安装得更快,包的构建也有点不同。找不到解释切换到npm的文档。在开始npm之前删除yarn.lock。否则,请参阅上面的答案。