Package.json中npm依赖版本管理
来由
近期项目中总是报Typescript
版本警告,很是烦人,趁着有空,找一下原因,随之就浮现了 npm 依赖版本管理问题。
警告 ⚠️ 信息如下:
1 |
|
Package.json
中为:
1 |
|
npm 包版本格式
npm 包版本的格式为:
1 |
|
major
:新的架构调整,不兼容老版本minor
:新增功能,兼容老版本patch
:修复 bug,兼容老版本
包版本的声明方式有:
version
- 必须匹配指定版本, 如3.2.1
>version
- 必须大于指定版本, 如>3.2.1
>=version
- 可大于或等于指定版本, 如>=3.2.1
<version
- 必须小于指定版本, 如<3.2.1
<=version
- 可小于等于指定版本, 如<=3.2.1
~version
- 大约匹配某个版本, 如~3.2.1
, 如果minor
版本号指定了,那么minor
版本号不变,而patch
版本号任意, 如果minor
和patch
版本号未指定,那么minor
和patch
版本号任意^version
- 兼容某个版本, 如^3.2.1
如:
^1.1.2
,表示>=1.1.2 <2.0.0,可以是 1.1.2,1.1.3,…..,1.1.n,1.2.n,…..,1.n.n
如:^0.2.3
,表示>=0.2.3 <0.3.0,可以是 0.2.3,0.2.4,…..,0.2.n
如:^0.0
,表示 >=0.0.0 <0.1.0,可以是 0.0.0,0.0.1,…..,0.0.nx-range
- x 的位置表示任意版本, 如3.2.x
*-range
- 任意版本,””也表示任意版本, 如*
, 表示>=0.0.0
的任意版本version1 - version2
- 大于等于version1
,小于等于version2
, 如1.1.2 - 1.3.1
, 表示包括1.1.2
和1.3.1
和它们之间的任意版本range1 || range2
- 满足range1
或者满足range2
,可以多个范围, 如<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0
, 表示满足这 3 个范围的版本都可以
而通常我们通过 npm install typescript
/yarn add typescript
命令安装的都是 ^version
格式
yarn.lock
/package.lock.json
的作用
通过上面可知每次下载依赖的版本可能都会不同,这就造成了有时本地 build 完全没有问题,但是推到服务器或者在别人电脑上就会 build 失败。
所以 lock 文件会记录所有包的版本以及包的依赖的版本,这样就可以保证每个人下载的依赖版本都是完全相同的,从而避免很多问题。
问题及总结
结合上面的内容,大家应该看的出来,问题就出在版本声明^3.2.1
中的^version
格式上面,随着我们增加依赖包,或者更新项目内依赖包,且依赖有更高版本,导致Typescript
从3.2.1
自动升级到3.7.4
, 而我的跟Typescript
相关的依赖却没有随之升高或暂不支持高版本,导致命令行爆出警告 ⚠️ 提示。
所以大家只有修改一下Package.json
中Typescirpt
的版本格式并重新安装一下项目依赖就好了。这个问题适用于所有 npm 依赖,并且也反映出我们项目中 npm 依赖版本管理有问题,需要我们改进。
参考文档
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!