npm包版本管理
当我们开发完成一个npm包时,发布上线之前需要给它定义一个版本号,版本号采用X.Y.Z的格式,其中X、Y、Z为非负的整数,且禁止在数字前方补零。版本号只能增加,禁止下降,代码的修改必须以新版本形式更新。
- X为主版本号(major):做了不兼容修改或颠覆式的重写
- Y为次版本号(minor):向下兼容的功能性新增
- Z为修订号(patch):向下兼容的问题修正
上述介绍的是标准版本,日常开发中我们应该都见到过这样的版本号"element-plus": "^1.1.0-beta.24"
,这样的版本称为“先行版本”。当某个版本改动比较大、并非稳定而且可能无法满足预期的兼容性需求时,你可能要先发布一个先行版本。
先行版本号可以加到“主版本号.次版本号.修订号”的后面,先加上一个连接号,再加上一连串以句点分隔的标识符和版本编译信息。
- 内部版本(alpha)
- 公测版本(beta)
- 正式版本的候选版本rc:即Release candiate
我们经常可以看到package.json
中各种依赖版本号的不同写法:
"dependencies": {
"signale": "1.4.0",
"react": "16.x",
"prettier": ">= 1.13.0",
"table": "~5.4.6",
"yargs": "^14.0.0",
"figlet": "*",
}
不加任何版本前缀的代表是固定版本,常见的版本前缀有:
- “ >=&&< ”:匹配大于等于或小于某个版本号的最新发布的版本。
- “ ~ ”:当安装依赖时获取到有新版本时,安装到x.y.z中的z为最新版本。即保持主版本号、次版本号不变的情况下,保次修订版本号为最新版本。“~5.4.6”它将匹配“5.4.x”。
- “ ^ ”:当安装依赖时获取到有新版本时,安装到x.y.z中的y和z都为最新版本。即保持主版本号不变的情况下,保次次版本号、修订版本号为最新版本(保持从左至右的第一个非零版)。“14.0.0”它将匹配“14.x.x”。“0.3.4”: 大于等于 0.3.4 且小于 0.4.0版本,"^0.0.6": 大于等于 0.0.6 且小于 0.0.7版本。
- “ * ”:当安装依赖时获取到有新版本时,安装到x.y.z中的x、y、z均为最新版本。
注意:npm 在使用 --save 更新 package.json 时,默认使用前缀 ^。修改方法如下:
1、默认使用前缀~:npm config set save-prefix '~'
2、不使用前缀,保存确切版本 :npm config set save-exact true
由于不同环境、不同时间,导致安装的依赖包版本不同是很容易发生的,不知道大家有没有遇到过本地运行和线上运行表现不一致的情况,就极有可能是依赖安装的版本不一致导致的,这个时候我们可以使用npm ls
命令查看项目安装的依赖包的具体版本:
npm ls --depth 0 --prod
那怎么预防这种情况呢?
大家有没有注意到,使用yarn安装依赖的时候,根目录下会自动生成一个yarn.lock
文件,该文件包含了当前项目中所安装的依赖包的版本信息。其他人在使用yarn安装项目的依赖包时就可以通过该文件创建一个完全相同的依赖环境。
在使用npm(版本需大于5.0.0)安装依赖的时候,项目的根目录下也会自动生成一个package-lock.json
的文件夹,作用与yarn.lock
相同,都是用来锁定项目依赖具体的版本号的。
参考文章