以下是前端环境,非ci环境
npm是一个包管理器,在package.json中有项目对各个包的依赖,在首次npm install生成package-lock.json.
package-lock.json就是用以记录当前实际安装的npm 包的具体信息, 锁死版本号,包之间的依赖关系和缓存信息
简单的说,package-lock.json 就是确保你项目中的依赖不会在你不知不觉中自动升级。
以vuex的安装为例
执行npm install 的时候,如果当前目录没package-lock.json文件,会在当前目录下生成一个package-lock.json文件
安装: npm install vuex@^3.6.2
确定版本: package.json为 { "vuex": "^3.6.2"}
package-lock.json文件的版本是{ "version": "3.6.2"}
node_modules中的版本时候3.6.2
安装: npm install vuex@^3.1.0 // 版本号前的^,意思是下载依赖时默认更新当前大版本下的最新版本
确定版本: package.json为 { "vuex": "^3.1.0"}
package-lock.json文件的版本是{ "version": "3.6.2"}
node_modules中的版本时候3.6.2
安装: npm install vuex@3.1.0。// 删除版本前的^
确定版本: package.json为 { "vuex": "3.1.0"}
package-lock.json文件的版本是{ "version": "3.1.0"}
node_modules中的版本时候3.1.0
删除node_modules,重新 npm install,目录下无论是否存在package-lock.json文件
package.json为 { "vuex": "^3.1.0"}
package-lock.json文件的版本是{ "version": "3.6.2"}
node_modules中的版本时候3.6.2
手动将json中的vuex的版本改为^4.0.0,然后npm install
lock文件的antd版本更新
如果通过npm i antd@4.0.0 安装的话也会更新lock文件
新的package中的antd版本与package-lock生成时旧的package设置的版本不一致
package.lock文件更新,下载vuex最新的4.1.0版本(4.x.x版本最高版本)
package.json 为 { "vuex": "^4.0.0" }
package-lock.json 的verion为 "version": "4.1.0",
node_modules version vuex@4.1.0
将node版本升级到 10+, npm 升级到 6+ ,在执行 npm install 操作时,node会动态生成package-lock.json,这样其他人再用 npm安装时,包的版本会和 package-lock.json 中定义的一样。
通常我们在npm i XXX@5.1.0插件的指定版本时,package.json会自动插入一条,默认显示XXX:'^5.1.0'插件名及其版本号,但是版本号前的^,意思是下载依赖时默认更新当前大版本下的最新版本,实际上在package-lock.json中可能就指定的是XXX的5.10.2版本了。 可以修改package.json,手动去掉版本号前面的^,达到固定下载的插件版本的目的。
npm view 依赖包名 versions --json
![](https://img.haomeiwen.com/i9444961/5dc155b5e367801f.png)
查看本地当前版本号可参考:https://www.python100.com/html/X3BZ01IO5M90.html
![](https://img.haomeiwen.com/i9444961/21499c84ae4d782a.png)
参考:https://blog.csdn.net/kelly0721/article/details/122931230
当package.json与package-lock.json的依赖版本不一致时,如何抉择?
1、npm v5.0.x: 根据package.json下载
2、npm v5.1.0-v5.4.2当package.json声明的依赖版本的规范有符合更新版本时,就忽略package-lock.json, 按照package.json安装并更新package-lock.json
3、npm5.4.2之后当package.json声明的依赖版本规范与package-lock安装版本兼容时,根据lock安装,如果不兼容安装package.json安装.
npm ci相对npm install的不同是,ci要求项目中必须有package-lock.json,同时ci在安装的时会先删除node_modules再权限一次性完全按照package.json安装,如果与package.json有冲突,直接报错.
npm install工作原理
![](https://img.haomeiwen.com/i9444961/e6437f2579d33251.png)
package-lock.json可以提交到git上,但是发布的npm包不要提交package-lock.json,具体根据团队要求
网友评论