package.json 与 package-lock.json你可能不是真得了解

前言

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站搜索“我们一起学前端”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值