描述

package-lock.json会自动为npm修改node_modules树或任何操作而生成package.json。它描述了生成的确切树,以便后续安装能够生成相同的树,而不管中间依赖性更新如何。

这个文件旨在被提交到源代码库,并提供各种用途:

描述依赖关系树的单一表示,以确保队友,部署和持续集成确保安装完全相同的依赖关系。

为用户提供一个设施,使其能够“前往”以前的状态,node_modules而不必提交目录本身。

通过可读的源代码控制差异来促进树更改的更大可见性。

并通过允许npm跳过先前安装的软件包的重复元数据分辨率来优化安装过程。

一个关键的细节package-lock.json是它不能被发布,并且如果在顶层包之外的任何地方发现它将被忽略。它与npm-shrinkwrap.json共享格式,它基本上是相同的文件,但允许发布。除非部署CLI工具或以其他方式使用发布过程来生产产品包,否则不建议这样做。

如果两个package-lock.json和npm-shrinkwrap.json存在于包的根,package-lock.json将被完全忽略。

文件格式
名称
包的名称,这是一个包锁。这必须与内容匹配 package.json。


包的版本,这是一个包锁。这必须与内容匹配 package.json。

lockfileVersion
整数版本,1从此文档的版本号开始,在生成此版本时使用其语义package-lock.json。

packageIntegrity
这是从该创建的子资源完整性值package.json。不package.json应该进行预处理。子资源完整性字符串可以由模块生成 ssri。

preserveSymlinks
表示安装是在NODE_PRESERVE_SYMLINKS启用环境变量的情况下完成的 。安装程序应该坚持该属性的值与该环境变量相匹配。

依赖
包名称到依赖对象的映射。依赖项对象具有以下属性:


这是一个说明符,它唯一标识了这个包,并且可以用来获取它的新副本。

捆绑的依赖关系:无论来源如何,这是纯粹用于信息目的的版本号。
注册表来源:这是一个版本号。(例如1.2.3)
git sources:这是一个解析commitit的git说明符。(例如git+https://example.com/foo/bar#115311855adb0789a0466714ed48a1499ffea97e)
http tarball来源:这是tarball的URL。(例如https://example.com/example-1.3.0.tgz)
本地tarball源码:这是tarball的文件URL。(例如file:///opt/storage/example-1.3.0.tgz)
本地链接源:这是链接的文件URL。(例如file:libs/our-module)
廉正
这是此资源的标准子资源完整性。

对于捆绑的依赖项,不包括源代码。
对于注册表来源,这是integrity注册表提供的,或者没有提供SHA1的shasum。
对于git来源,这是我们克隆的特定提交散列。
对于远程tarball源,这是基于文件SHA512的完整性。
对于本地压缩包来源:这是一个基于文件SHA512的完整性字段。
解决
对于捆绑的依赖项,不包括源代码。
对于注册表来源,这是相对于注册表URL的tarball路径。如果tarball URL与注册表URL不在同一台服务器上,那么这是一个完整的URL。
捆绑
如果为true,则这是捆绑的依赖关系,并将由父模块进行安装。安装时,此模块将在提取阶段从父模块中提取,而不是作为单独的依赖项安装。

开发
如果为true,那么这个依赖是或者是顶层模块的开发依赖,或者是一个依赖的传递依赖。这对于既是顶级开发依赖性又是顶级非开发依赖性的传递依赖性的依赖性是错误的。

可选的
如果为true,那么这个依赖是或者是顶层模块的可选依赖,或者是一个可传递的依赖。对于既是顶层可选依赖项又有顶层非可选依赖项的传递依赖项的依赖项,这是错误的。

即使在当前平台上可以卸载,也应包含所有可选的依赖关系。

依赖
这个依赖关系的依赖关系,就像在顶层一样。