根据官方文档,这个 package-lock.json 是在 `npm install`时自动生成的一份文件,用来记录当前状态下实际安装的各个依赖的具体来源和版本号。
那你可能会问这个文件的作用是什么呢?它和package.json有什么联系?版本管理不提交package-lock.json又会有什么问题呢?我们往下看~
它有什么用呢?因为npm是一个用于管理package之间依赖关系的管理器,它允许开发者在pacakge.json中间标出自己项目对npm各库包的依赖。你可以选择以如下方式来标明自己所需要库包的版本
这里我们用element-ui来举例说明:
![047a82eea659745ea28a475e179fe7b3.png](https://i-blog.csdnimg.cn/blog_migrate/93ef20d5af73c793b829e25115344c68.jpeg)
这里面的【^】符号是定义了包含2.4.0版本及2.4.0以上版本都可使用,指如果 element-ui的版本是超过2.4.0,并在大版本号(2)上相同,就允许下载最新版本的 element-ui依赖包,例如实际上可能运行npm install时候下载的具体版本是2.4.11。
![c7630e4209b8adc6bbc5c2bb19eed95d.png](https://i-blog.csdnimg.cn/blog_migrate/fb2c075e1f1dca1e19cc7cb8cf55997f.jpeg)
绝大多数向新版本兼容依赖时都没有问题,但是因为npm是开源世界,各依赖包的版本语义可能并不相同会存在某些差异。【因为版本不同可能出现:某些样式不统一、某些功能不统一、某些方法有无等问题,如果因为版本不同,出现本不应该出现的bug,而且我们还找不到原因,你们说头疼不头疼,是吧~】
![e194efe26853d81391a66a895756a270.png](https://i-blog.csdnimg.cn/blog_migrate/6228e3c3b5a4e6914d72a7b7f7f45f9d.jpeg)
因此npm最新的版本就开始提供自动生成package-lock.json功能,为的是让开发者知道只要你保存了源文件,到一个新的机器上、或者新的下载源,只要按照这个package-lock.json所标识的具体版本下载依赖库包,就能确保所有依赖包与你上次安装的完全一样。
原来package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本,为了稳定性考虑我们几乎是不敢随意升级依赖包的,这将导致多出来很多工作量,测试/适配等,所以package-lock.json文件出来了,当你每次安装一个依赖的时候就锁定在你安装的这个版本。
所以在协作开发时,如果发现package.json和package-lock.json这两个文件有更新,我们应该删掉 node_modules,重新 npm install 一下才对。
如果是单独开发,自己承担整个项目时,无须考虑这些问题(以上所有问题)。