package-lock.json文件详解

我们在一个前端项目中使用npm install拉取依赖就会生成一个package-lock.json文件。

根据官方文档,这个package-lock.json是用来记录当前状态下实际安装的各个npm package的具体来源和版本号

相关文件的介绍

  • package.json里面定义的是版本范围(比如^1.0.0),具体跑npm install的时候安的什么版本,要解析后才能决定,这里面定义的依赖关系树,可以称之为逻辑树(logical tree)。注意:package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本。
  • node_modules文件夹下才是npm实际安装的确定版本的东西,这里面的文件夹结构我们可以称之为物理树(physical tree)。安装过程中有一些去重算法,所以你会发现逻辑树结构和物理树结构不完全一样。
  • package-lock.json可以理解成对结合了逻辑树和物理树的一个快照(snapshot),里面有明确的各依赖版本号,实际安装的结构,也有逻辑树的结构。

因此,package-lock.json最大的好处就是能获得可重复的构建(repeatable build),当你在CI(持续集成)上重复build的时候,得到的artifact是一样的,因为依赖的版本都被锁住了(为了稳定性考虑我们几乎是不敢随意升级依赖包的)。

npm install规则变化

查阅资料得知,自npm 5.0版本发布以来,npm install的规则发生了三次变化。

  1. npm 5.0.x 版本,不管package.json怎么变,npm install时都会根据lock文件下载

  2. 5.1.0版本后npm install会无视lock文件去下载最新的npm

  3. 5.4.2版本后如果改了package.json,且package.json和lock文件不同,那么执行npm i时npm会根据package中的版本号以及语义含义去下载最新的包,并更新至lock。

参考


----------- 本文结束啦感谢您阅读 -----------

赞赏一杯咖啡

欢迎关注我的其它发布渠道