当前位置: 首页 > article >正文

【JSON】package.json与package-lock.json

执行npm install下载包的时候,项目根目录会有package.json与package-lock.json俩个文件,具体分别是做什么呢?下面简单记录以下:

为什么会有package-lock.json文件

记录每个依赖包的具体版本号,确保在不同的环境或机器上安装依赖包时,都会安装相同的版本,保证项目的一致性和可重复性‌。在团队协作和项目维护中,如果没有lock文件,可能在不同的环境中工作,如果没有lock文件版本锁定,可能会导致依赖冲突或不一致的问题,保证了项目的一致性和可重复性,也加快了执行npm install时的安装速度。

版本管理

在package.json文件中每个包都有个版本号,每隔版本号都是有大版本、小版本、修改版本组成;

比如:

  • "axios": "1.0.0"  =>  axios只能安装1.0.0版本,大、小、修改版本都锁定,不能更新到更高版本。
  • "axios": "~1.0.0"  =>  axios只能安装1.0.x版本,大、小版本锁定,可以更新到1.0.x版本。
  • "axios": "^1.0.0"  =>  axios只能安装1.x.x版本,大版本锁定,不能更新到2.0.0版本。
  • "@vant/area-data": "latest" =>  默认安装最新版本

npm install时安装规则

  • 如果只有package.json,运行npm i会根据它生成一个package-lock.json文件,这个文件相当于本次install的一个快照,不仅记录了package.json指明的直接依赖的版本,也记录了间接依赖的版本 ;
  • 如果package-lock.json的版本在package.json的版本指定范围内,即使package.json中有新版本,执行npm install也会根据package-lock.json下载;
  • 如果手动修改package.json的版本,且和lock文件中版本不兼容,那么执行npm install时,lock文件会更新到兼容package.json的版本;

package-lock.json什么时候会变

  • 首次npm install,package-lock会自动生成;
  • 包位置修改,从devDependenices移动到dependencies,部分包的dev字段有可能会变成true;
  • 镜像源registry修改;
  • npm install 添加或者npm uninstall删除包
  • 更新某个包的版本;

尽量不要手动修改版本号,可能会导致一些错误,尽量使用npm install 添加或者npm uninstall删除包,这样会自动更新package.json与package-lock.json文件

package-lock.json文件的主要构成

  • "name":指定包的名称,与 package.json 文件中的 "name" 字段相对应。
  • "version":指定包的版本号,与 package.json 文件中的 "version" 字段相对应。
  • "lockfileVersion":package-lock.json 文件的格式版本号,用于确定文件的结构和兼容性。
  • "requires": 是否使用requires来追踪模块的依赖关系
  • "dependencies":一个对象,包含项目所依赖的其他包及其版本号。这些依赖项可以是直接依赖项,也可以是间接依赖项(被其他依赖项所依赖)。并不是所有的子依赖都有 dependencies 属性,只有子依赖的依赖和当前已安装在根目录的 node_modules 中的依赖冲突之后, 才会有这个属性。 这可能涉及嵌套情况的依赖管理。
  • "devDependencies":一个对象,列出了在开发过程中所需的包及其版本号。这些包通常用于测试、构建和开发工具。
  • "dev":表示该模块是否为顶级模块的开发依赖或者是一个的传递依赖关系
  • "resolved":依赖包的安装源(可以理解为下载地址)
  • "integrity":每个包的完整性校验值,用于确保下载的包的完整性和安全性。它是使用哈希算法计算得出的唯一标识符,用于验证包的内容是否被篡改。
  • "subdependencies":一个对象,包含每个包的子依赖项。这包括子依赖项的名称、版本号和其他子依赖项的信息。
  • "dependenciesMeta":一个对象,包含每个包的元数据。这些元数据可以包括版本范围、源、分辨率策略和其他信息。
  • "engines":一个对象,包含该包需要使用的引擎,以及引擎的版本范围,通常只有node、npm

http://www.kler.cn/a/409571.html

相关文章:

  • skywalking es查询整理
  • 【大数据学习 | Spark-Core】广播变量和累加器
  • LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读
  • Springboot项目添加拦截器
  • CH595 驱动数码管
  • mayo介绍和QTqmake编译基于Opencascade开发的mayo工程-小白配置
  • 【可变参数,lambda,function,bind】
  • RabbitMQ 消息队列代码实战1
  • STL之哈希
  • arm学习总结
  • 【Electron学习笔记(一)】Electron基本介绍和环境搭建
  • mac Parallels Desktop 20 20.1.1-55740安装windows10教程
  • 基于yolov8、yolov5的智能零售柜商品检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • [极客大挑战 2019]BabySQL--详细解析
  • 数据库-基础理论
  • git bash是什么,git是什么,git中的暂存区是什么,git中的本地仓库是什么,git中工作目录指的是什么
  • 长三角文博会:Adobe国际认证体系推动设计人才评价新标准
  • 【C语言】深入解析assert 断言机制
  • Spring Boot 2 和 Spring Boot 3 中使用 Spring Security 的区别
  • 微信小程序页面配置详解:从入门到精通
  • MATLAB实现garch模型(广义自回归条件异方差)
  • LayaBox1.8.4实现自定义3DMesh
  • PyOCD 的基本使用
  • 详解Qt QDir路径类
  • 跨平台应用开发框架(1)----Qt(组件篇)
  • C#里怎么样实现单向链表?