前言
package.json 用来描述项目及项目所依赖的模块信息,我们可以随便找一个项目看看
版本号
版本号由三部分组成:major.minor.patch,主版本号.次版本号.修补版本号。
相信大家都会经历过,我们安装一些依赖包的时候,版本号前面都会带 ^ 或者 ~ 的符号,这两个符号代表什么意思呢?
~ 会匹配最新的小版本依赖包,比如 ~1.2.3 会匹配所有 1.2.x 版本,但是不包括 1.3.0
^ 会匹配最新的大版本依赖包,比如 ^1.2.3 会匹配所有 1.x.x 的包,包括 1.3.0,但是不包括 2.0.0
* 安装最新版本的依赖包,比如 *1.2.3 会匹配 x.x.x,
使用
1.直接指定版本号:eg:1.2.3 这样写没什么问题,但是如果依赖包发布了修补版本
如:现在依赖包有一个bug,在1.2.4版本中修复了,此时我们要升级,需要手动修改package.json中得版本号,很麻烦
2.使用~,^,* 可以解决手动修改package.json版本号得问题
但是这里要注意:一般推荐使用~来指定版本,因为~一般是针对小的bug提交的版本,对我们的使用没有影响;
如果我们使用^或*,这两种都都是大版本的迭代,可以是依赖包的功能修改,这时候,我们还是按照之前的用法去使用,我们的项目可能会出现错误。
问题
当多人开发的时候,不管使用~/^/* ,每个人安装的依赖包就会有差异。一旦有差异就会出现项目运行结果不一致。
这里看一下iview的更新日志说明一下
使用~的依赖包为什么会不一样?
因为:比如:~1.2.3 一个月前,这个依赖包的最新版本是1.2.5,一个月前我安装的版本就是1.2.5 ; 过了几个月新来了一个小伙伴,此时这个依赖包版本更新了 是1.2.9,此时这个小伙伴安装的就是1.2.9。这个时候我们俩个就会安装不同的版本。更何况我们使用^或*的时候。由于版本差异,是不是会存在bug的隐患。
这时候,有的同学会想,我们直接锁死版本是不是就解决了。确实,我们直接将上面的版本锁死:1.2.3;这是确实所有人都是一样的版本。这个想法固然是不错的,但是你只能控制你自己的项目锁死版本号,那你项目中依赖包的依赖包呢?你怎么控制限制别人锁死版本号呢?
此时package-lock.json就应运而生。
package-lock.json
package-lock.json 是在 npm(^5.x.x.x)后才有,中途有几次更改。
它的产生就是来对整个依赖树进行版本固定的(锁死)。
我们可以随便找个项目看看
产生:
当我们在一个项目中npm install时候,会自动生成一个package-lock.json文件,和package.json在同一级目录下。package-lock.json记录了项目的一些信息和所依赖的模块。这样在每次安装都会出现相同的结果. 不管你在什么机器上面或什么时候安装。
当我们下次再npm install时候,npm 发现如果项目中有 package-lock.json 文件,会根据 package-lock.json 里的内容来处理和安装依赖而不再根据 package.json。
实际操作一下:
npm init
npm i --save axios
后面其他的小伙伴在安装依赖的时候,就会根据package-lock.json文件中的依赖包版本来安装。
问题
如果依赖包实在有bug,我们需要升级依赖包,此时我们只需要修改package.json依赖包的版本,只要package.json和package-lock.json中版本不一致,就会重新生产一个package-lock.json。这样就达到了升级依赖包版本的目的
npm i axios@5.3.5
到这里大家是不是对这两个json文件有了新的认识,有什么疑问欢迎大家评论留言。
更多学习视频学习资料请参考:B站搜索“我们一起学前端”