package-lock.json的作用以及版本号说明

目录

一、package-lock.json的作用

二、package.json中库的版本号详解

1.版本号中的major version、minor verision和patch version

2.package.json中库的版本号的几种写法(^和~的区别)


一、package-lock.json的作用

package-lock.json的作用用一句话简单概括,就是锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致。

举例说明

1.需求由来

之前,在react项目开发过程中遇到一个问题,同一个项目第一次cnpm install的时候还可以启动,过一段时间,把node_modules删掉,重新cnpm install,发现项目启动报错了。奇怪,项目代码和之前一样,一点都没改动。查其原因,发现是package.json文件的依赖模块版本号没有固定,如 "roadhog": "^2.5.0-beta.4"。这里有个^,安装的时候会安装2.x.x的最新版本,因为这期间该模块有更新,导致两次install的版本不一样,所以项目报错了。

2.解决办法

第一个想到的是我把该模块写死不就行了 "roadhog": "2.5.0-beta.4"。但是仔细一想,仍会有问题。npm最方便的地方,是它可以帮我们管理依赖,自动下载依赖。意思是假如我们依赖roadhog,roadhog又依赖模块A、B等,我们安装roadhog时,npm会自动帮我们安装好roadhog依赖的模块A、B等。

我们把roadhog锁死了,但是其引用的A模块仍用的是^括号写法(即没有锁死版本),所以假如A模块更新了,仍可能会出现之前类似的问题。那么该怎么进行版本控制呢。
所以我们要对整个依赖树做锁定,那前后编译出来的应用版本就不会存在两次安装版本不一的问题了。这就引出了我们的package-lock.json文件。它的产生就是来对整个依赖树进行版本固定的(锁死)

 

在以前可能就是直接改package.json里面的版本,然后再npm install了,但是npm 5版本后就不支持这样做了,因为版本已经锁定在package-lock.json里了。

所以我们只能通过 npm install xxx@x.x.x  去更新我们的依赖,然后package-lock.json也能随之更新。

比如:npm install file-saver@1.3.8

 

二、package.json中库的版本号详解

1.版本号中的major version、minor verision和patch version

版本号从左到右依次为major version、minor verision和patch version。遵循 “主要(大)版本.次要(小)版本.修补版本” 的格式规定。

marjor :这个版本号变化了表示有不可以和上个版本兼容的大更改。

minor :这个版本号变化了表示增加了新的功能,并且可以向后(下)兼容。

patch :这个版本号变化了表示修复了bug,并且可以向后兼容。

2.5.8对应就是:2是marjor version;5是minor version;8是patch version。

因为major version变化表示可能会影响之前版本的兼容性,所以无论是波浪符号还是插入符号都不会自动去修改major version,因为这可能导致程序crush,可能需要手动修改代码。

2.package.json中库的版本号的几种写法(^和~的区别)

"dependencies": {
    "react": "17.0.1",
    "accepts": "~1.3.7",
    "react-scripts": "^4.0.1"
  }
  1. 指定版本:比如2.5.8,安装时只安装指定版本
  2. 波浪号~(tilde) +指定版本:比如~2.5.8,表示安装2.5.x的最新版本(不低于2.5.8),但是不安装2.6.x,也就是说安装时不改变主要版本号和次要版本号。
  3. 插入号^(caret)+指定版本:比如ˆ2.5.8,表示安装2.x.x的最新版本(不低于2.5.8),但是不安装3.x.x,也就是说安装时不改变主要版本号。需要注意的是,如果主要版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
  4. latest:安装最新版本

^和~的区别总结起来就是:^能升级“主要版本.次要版本.修补版本”,而~能升级“主要版本.次要版本.修补版本”。(绿色字体表示能升级的版本号

波浪符号~曾经是npm安装时候的默认符号,现在默认符号已经变为插入符号^了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值