package-lock.json
对VUE工程进行编译,提示错误:
在目录/home/q/jenkins/workspace/xxxx-fe下npm-shrinkwrap.json、package-lock.json、yarn.lock都不存在,构建存在风险。请使用其中一种方式进行依赖版本固化。
看起来意思是工程里缺少一些文件,这些文件的作用是进行依赖版本固化的。
参考了一下公司已有的node工程,发现工程里存在package-lock.json,看来人家的工程是用的这个文件来进行依赖版本管理。
上网搜了一下package-lock.json的到底是什么。
https://www.cnblogs.com/wangweizhang/p/10530294.html
npm 5.0版本之后,npm install后都会有一个package-lock.json,作用是什么?
1、锁定安装时的包的版本号,需要上传到git,保证大家的依赖包一致。
2、package-lock.json 是在 npm install
时候生成一份文件,用来记录当前状态下实际安装的各个npm package的具体来源和版本号。
3、它有什么用呢?因为npm是一个用于管理package之间依赖关系的管理器,它允许开发者在pacakge.json中间标出自己项目对npm各库包的依赖。你可以选择以如下方式来标明自己所需要库包的版本;例如:
"dependencies": {
"@types/node": "^8.0.33",
},
这里面的 向上标号^是定义了向后(新)兼容依赖,指如果 types/node的版本是超过8.0.33,并在大版本号(8)上相同,就允许下载最新版本的 types/node库包,例如实际上可能运行npm install时候下载的具体版本是8.0.35。
大多数情况这种向新兼容依赖下载最新库包的时候都没有问题,可是因为npm是开源世界,各库包的版本语义可能并不相同,有的库包开发者并不遵守严格这一原则:相同大版本号的同一个库包,其接口符合兼容要求。这时候用户就很头疼了:在完全相同的一个nodejs的代码库,在不同时间或者不同npm下载源之下,下到的各依赖库包版本可能有所不同,因此其依赖库包行为特征也不同有时候甚至完全不兼容。
解决:
因此npm最新的版本就开始提供自动生成package-lock.json功能,为的是让开发者知道只要你保存了源文件,到一个新的机器上、或者新的下载源,只要按照这个package-lock.json所标示的具体版本下载依赖库包,就能确保所有库包与你上次安装的完全一样。
4、package.json缺点
原来package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本,为了稳定性考虑我们几乎是不敢随意升级依赖包的,这将导致多出来很多工作量,测试/适配等,所以package-lock.json文件出来了,当你每次安装一个依赖的时候就锁定在你安装的这个版本。