npm 5 今天发布 ,其中一项新功能包括确定性安装,并创建了一个package-lock.json
文件。
这个文件应该保存在源代码管理中吗?
我假设它类似于yarn.lock
和composer.lock
,两者都应该保存在源代码控制中。
是的, package-lock.json
旨在检入源代码管理。如果您使用的是 npm 5,则可以在命令行中看到: created a lockfile as package-lock.json. You should commit this file.
根据npm help package-lock.json
:
对于 npm 修改
node_modules
树或package.json
任何操作,都会自动生成package-lock.json
。它描述了生成的确切树,以便后续安装能够生成相同的树,而不管中间依赖性更新。此文件旨在提交到源存储库 ,并用于各种目的:
描述依赖关系树的单个表示,以确保队友,部署和持续集成能够安装完全相同的依赖关系。
为用户提供一种 “时间旅行” 到
node_modules
先前状态的node_modules
而无需提交目录本身。通过可读的源代码控制差异来促进树更改的更大可见性。
并通过允许 npm 跳过以前安装的软件包的重复元数据解析来优化安装过程。
关于
package-lock.json
一个关键细节是它无法发布,如果在 toplevel 包以外的任何地方找到它,它将被忽略。它与 npm-shrinkwrap.json(5)共享一种格式,它本质上是同一个文件,但允许发布。除非部署 CLI 工具或使用发布过程生成生产包,否则不建议这样做。如果
package-lock.json
和npm-shrinkwrap.json
package-lock.json
都存在于包的根目录中,那么package-lock.json
将被完全忽略。
是的,它打算被签入。我想建议它获得自己独特的提交。我们发现它给我们的差异增加了很多噪音。
是的,最佳做法是办理登机手续
我同意在看到差异时会引起很多噪音或冲突。但好处是:
package.json
使用^1.2.3
,但是如何确保每次npm install
都会在您的开发机器和构建服务器中获取相同的版本,尤其是那些间接依赖包?好吧, package-lock.json
将确保这一点。 (在npm ci
的帮助下,根据锁文件安装包) npm audit fix
(我认为审计功能来自 npm 版本 6)。