将NPM更新到版本5后,我在package.json中找到了package-lock.json
文件。
这两个文件有什么区别?
package-lock.json
有什么好处?
答案 0 :(得分:9)
package.json文件:列出项目所依赖的包。允许您使用语义版本控制规则指定项目可以使用的包的版本。
根据npm文档,
对于npm修改node_modules树或package.json的任何操作,都会自动生成package-lock.json。它描述了生成的确切树,以便后续安装能够生成相同的树,无论中间依赖性更新如何。
此文件旨在提交到源存储库中,并用于各种目的:
描述依赖关系树的单一表示形式,以确保队友,部署和持续集成能够安装完全相同的依赖关系。
为用户提供一个“时间旅行”到node_modules之前状态的工具,而无需提交目录本身。
通过可读的源代码控制差异,提高树木更改的可见性。
基本上,package-lock.json用于优化安装过程,允许npm跳过以前安装的软件包的重复元数据解析。
在npm 5.x.x之前,package.json是项目的真实来源。生活在package.json中的是法律。 npm用户喜欢这个模型,并且已经习惯于维护他们的包文件。然而,当首次引入package-lock时,它的行为与有多少人预期的相反。给定一个预先存在的包和package-lock,对package.json的更改(许多用户认为是真实的来源)没有反映在package-lock中。
示例:程序包A,版本1.0.0在包和package-lock中。在package.json中,A被手动编辑为1.1.0版。如果认为package.json是真实来源的用户运行npm install
,他们会期望安装版本1.1.0。但是,安装了1.0.0版,尽管列出的v1.1.0是package.json。
示例:package-lock中不存在模块,但它确实存在于package.json中。作为一个将package.json视为事实来源的用户,我希望能够安装我的模块。但是由于软件包没有出现在软件包锁中,所以它没有安装,我的代码因为无法找到模块而失败。
在Official npm Documentation中了解有关package-lock.json的更多信息!