[npm CLI文档]配置NPM-package.json

时间:2021-08-20 09:25:25   收藏:0   阅读:20

package-lock.json

一个清单的清单表现形式

描述

对于NPM修改node_modules树或package.json的任何操作,都会自动生成package-lock.json
这个文件被提交到源仓库中,并用于各种目的:

package-lock.json 与 npm-shrinkwrap.json对比

这两个文件具有相同的格式,并在项目的根目录中执行类似的功能。
不同之处在于package-lock.json不能被发布,如果在根目录之外的任何地方发现它将被忽略。
相比之下,npm-shrinkwrap.Json允许发布,并从遇到的地点定义依赖树。除非部署CLI工具或使用发布过程(publication process)来生成生产包(production packages),否则不建议这样做。
如果package-lock.jsonnpm-shrinkwrap.json同时出现在项目的根目录中,npm-shrinkwrap.json优先生效,package-lock.json将被忽略。

被隐藏的 Lockfiles

为了避免重复处理node_modules文件夹,从v7开始,npm使用node_modules/.package-lock.json中“隐藏”的lockfile。它包含关于树的信息,并用于代替读取整个node_modules层次结构,前提是满足以下条件:

也就是说,如果隐藏的lockfile是作为软件包树的最新更新的一部分创建的,则该文件才具有相关性。如果另一个CLI以任何方式对该树进行了变异,则会检测到该异常,并且隐藏的锁定文件将被忽略。
请注意,当手动更改包的内容时,包文件夹的修改时间不受影响(不会改变)。例如,如果将一个文件添加到node_modules/foo/lib/bar.js中,那么node_module/foo上的修改时间将不会反映这种变化。如果您在node_module中手动编辑文件,通常最好是删除node_modules/.package-lock.json
由于隐藏的lockfile被较早的npm版本忽略,它在普通的lockfile("normal" lockfiles.)中不存在向后兼容性。也就是说,它是lockfileVersion:3,而不是lockfileVersion:2。

处理旧版本Lockfiles

当npm在包安装过程中,检测到一个来自npm v6或更早版本的lockfile文件时,它会自动更新,从node_modules树或npm registry(当node_modules树是空的或者是一个特别老版本的lockfile)中获取丢失的信息。

文件格式

name

包的名字。也为package-lock提供名字。这将匹配package.json中的内容。

version

包的版本号。也为package-lock提供版本。这将匹配package.json中的内容。

lockfileVersion

一个整数版本,从文档的版本号1开始,其语义在生成这个package-lock.json时被使用。注意,在npm v7中,文件格式发生了很大的变化,以跟踪之前需要在node_modules或npm注册表中查找的信息。npm v7生成的lockfile将包含lockfileVersion: 2。

NPM总是试图从lockfile中获取它所能获取的任何数据,即使它不是被支持的版本。

packages

这是一个对象,将包位置映射到另一个包含该包信息的对象。
工程的根路径通常以""键列出,所有其他包都可以用它们与工程的根路径文件夹的相对路径列出。
包描述符有以下字段:

dependencies

支持使用lockfileVersion:1的npm版本的历史遗留数据。这是包名到依赖项对象的映射。因为对象结构是严格分层的,所以符号链接依赖关系在某些情况下表示起来有些困难。
如果有packages部分,NPM v7会完全忽略这个部分,但为了支持在NPM v6和NPM v7之间切换,它会保持更新。
dependencies对象包含以下字段:

原文:https://www.cnblogs.com/welody/p/15162732.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!