package-lock.json的作⽤
1、package.json ⽂件⾥记录有项⽬所安装的依赖项,当 node_modules 被删除时,可以再根据该⽂件安装所需的依赖项;
2、npm 5 以前不会有 package-lock.json 这个⽂件,npm5 之后才加⼊这个⽂件;
3、当安装包的时候,npm 都会⽣成或者更新  package-lock.json 这个⽂件;
4、npm 5 之后的版本安装包的时候不需要加 --save 参数,它会⾃动保存依赖的信息;
5、当安装包的时候,会⾃动创建或者更新 package-lock.json ⽂件;
6、package-lock.json ⽂件会保存 node_modules 中所有包的信息(版本、下载地址),重新 npm install 的时候速度会提升;
7、⽂件的名称有 lock ,表⽰该⽂件可以⽤来锁定版本号,防⽌⾃动升级新版。
package-lock.json的作⽤就是锁定安装时的版本号并上传到git上,保证其他⼈在npm install时下载的依赖都保持⼀直。
根据官⽅⽂档,这个package-lock.json 是在 npm install时候⽣成⼀份⽂件,⽤以记录当前状态下实际安装的各个npm package的具体来源和版本号。
为什么要有这个⽂件呢?
npm是⼀个管理package之间依赖关系的管理器,它允许开发者在package.json⾥标出⾃⼰项⽬对npm各库包的依赖,如"dependencies": {
"@types/node": "^8.0.33",
},
^表⽰向后(新)兼容依赖,上⾯已经指出,所以实际npm i 下载下来版本可能是8.0.35.
⼤多数情况这种向新兼容依赖下载最新库包的时候都没有问题,可是因为npm是开源世界,各库包的版本语义可能并不相同,有的库包开发者并不遵守严格这⼀原则:相同⼤版本号的同⼀个库包,其接⼝符合兼容要求。这时候⽤户就很头疼了:在完全相同的⼀个nodejs的代码库,在不同时间或者不同npm下载源之下,下到的各依赖库包版本可能有所不同,因此其依赖库包⾏为特征也不同有时候甚⾄完全不兼容。
因此npm最新的版本就开始提供⾃动⽣成package-lock.json功能,为的是让开发者知道只要你保存了源⽂件,到⼀个新的机器上、或者新的下载源,只要按照这个package-lock.json所标⽰的具体版本下载依赖库包,就能确保所有库包与你上次安装的完全⼀样。
总结⼀下就是,package.json⽂件只能锁定⼤版本,也就是版本号的第⼀位,并不能锁定后⾯的⼩版本,你每次npm install都是拉取的该⼤版本下的最新的版本,为了稳定性考虑我们⼏乎是不敢随意升级依赖包的,这将导致多出来很多⼯作量,测试/适配等,所以package-lock.json⽂件出来了,当你每次安装⼀个依赖的时候就锁定在你安装的这个版本。
安装时包有bug怎么办?
不能直接去package.json⾥改,然后再npm install,(据知乎⽹友测试,这时候package-lock.json⽂件也会更新为修改的版本号,但是npm install安装到node_modules⾥的依赖并不是⼿改的版本。。所以还是不要⼿改了。)
只能通过 npm install xxx(更新⼩版本)或者npm install xxx@xxx(指定版本号)来更新依赖,然后package-lock.json随之更新。
package.json⽂件⾥的各种版本符号
version
必须匹配某个版本
^version
//^此符号表⽰向后兼容新版本,会把当前库的版本更新到第⼀位数(不是0的第⼀位)的最新版本;
//如第⼀个,会更新到4.X.X,也就是>=4.1.4 < 5.0.0;
"webpack-merge": "^4.1.4",  //>=4.1.4 < 5.0.0
"shelljs": "^0.8.2",  //>=0.8.2 <0.9.0
~version
他会更新到当前minor version(中间那位数)中的最新版本。
~1.15.2    >=1.15.2  <1.16.0
>=version
nodejs到底是干嘛用的呢
⼤于或等于某版本

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。