1. 版本号简介
软件版本号有四部分组成:
- 第一部分:主版本号,当进行不兼容的 API 更改时,则升级主版本;
- 第二部分:次版本号,当以向后兼容的方式添加功能时,则升级次版本;
- 第三部分:补丁版本号,当进行向后兼容的缺陷修复时,则升级补丁版本;
- 第四部分:日期版本号 + 希腊字母版本号(base、alpha、beta 、RC 、 release);
关于希腊版本号:
Base
此版本表示该软件仅是一个假页面链接,通常包括所有的功能和页面布局,但是页面中的功能都没有做完整的实现,只是做为整体网站的一个基础架构;
Alpha
软件的初级版本,表示该软件在此阶段以实现软件功能为主,通常只在软件开发者内部交流。一般而言,该版本软件的 Bug 多,需要继续修改,是测试版本。测试 人员提交 Bug 经开发人员修改确认之后,发布到测试网址让测试人员测试,此时可将软件版本标注为 alpha 版;
Beta
该版本相对于 Alpha 版已经有了很大的进步,消除了严重错误,但还需要经过多次 测试来进一步消除,此版本主要的修改对象是软件的UI。修改的的 Bug 经测试人员测试确认后可发布到外网上,此时可将软件版本标注为 beta 版;
RC
该版本已经相当成熟,基本上不存在导致错误的Bug,与即将发行的正式版本相差无几;
Release
该版本意味“最终版本”,在前面版本的一系列测试版之后,终归会有一个正式的版本,是最终交付用户使用的一个版本。该版本有时也称标准版。
2. package.json 中的依赖
dependencies 字段指定项目运行所依赖的模块,devDependencies 指定项目开发所需要的模块(测试阶段、过渡阶段的依赖应该加在 DevDependencies中)。它们都指向一个对象,该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。
模块名和版本号被假定组合成一个唯一的标识符。
{
"name": "ethopia-waza",
"version": "1.2.3",
"dependencies": {
"vue": "^2.6.11",
"axios": "^0.19.2",
"bar": "file:../foo/bar",
},
"devDependencies": {
"@vue/cli-plugin-vuex": "~4.4.0",
"@vue/cli-plugin-router": "~4.4.0",
"coffee-script": "~1.6.3",
},
}
version 字段必须能够被 node-semver 解析。node-semver 作为依赖项被捆绑进了 npm 中。
其实,版本号的写法并不是只有我们熟知的波浪号 ( ~3.8.0 )、插入号 ( ^3.8.0 ) 和 3.8.0,只要是能够被 node-semver 解析的写法都是可以的。
符号 | 含义 |
---|---|
= | 接受确切的版本 |
> | 接受高于指定版本的任何版本 |
>= | 接受等于或高于指定版本的任何版本 |
< | 接受低于指定版本的任何版本 |
<= | 接受等于或低于指定版本的任何版本 |
~ | 若写入的是 ~0.13.0,会更新到补丁版本:即 0.13.1,但不会更新到 0.14.0 |
^ | 若写入的是 ^2.3.1,相当于2.X.X, 即 >=2.3.1 < 3.0.0,不改变大版本号 |
- | 接受一定范围的版本(1.2.0 - 1.6.0) |
latest | 使用可用的最新版本 |
1.2.x | 可是1.2.0、1.2.1等,但不能是1.3.0 |
* | 匹配任何版本 |
’ '(空字符串) | 匹配任何版本,和 * 一样 |
http://… | URL作为依赖项 |
git… | Git URL作为依赖项 |
user/repo | GitHub URLs |
tag | 以 tag 发布的指定版本,参考 npm-tag |
path/path/path | 本地Paths |
|| 组合版本( < 2.1 || > 2.6)
{
"dependencies": {
"foo": "1.0.0 - 2.9999.9999",
"bar": ">=1.0.2 <2.1.2", 必须大于等于1.0.2版本且小于2.1.2版本
"baz": ">1.0.2 <=2.3.4", 必须大于1.0.2版本且小于等于2.3.4版本
"boo": "2.3.1", 必须匹配这个版本
"boo": "~2.3.1", 约等于2.3.1,只更新最小版本,相当于2.3.X,即>=2.3.1 <2.4.0
"thr": "2.3.x",
"boo": "^2.3.1", 与2.3.1版本兼容,相当于2.X.X, 即>=2.3.1 < 3.0.0,不改变大版本号。
"qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
"asd": "http://asdf.com/asdf.tar.gz", 在版本上指定一个压缩包的url,当执行npm install 时这个压缩包会被下载并安装到本地。
"til": "~1.2",
"elf": "~1.2.3",
"two": "2.x",
"lat": "latest", 安装最新版本
"dyl": "file:../dyl", 使用本地路径
"adf": "git://github.com/user/project.git#commit-ish" 使用git URL加commit-ish
}
}
3. 版本范围
连字符范围:X.Y.Z - A.B.C
指明版本范围
1.2.3 - 2.3.4: >=1.2.3 <=2.3.4
起始版本不全: 缺少的部分补0
1.2 - 2.3.4: 相当于1.2.0 - 2.3.4;
结束版本不全:所有以其开头的版本均符合要求
1.2.3 - 2.3 :相当于 >=1.2.3 < 2.4.0
1.2.3 - 2: 相当于 >=1.2.3 < 3.0.0
带有 X 的版本范围:1.2.X 、1.X、1.2.*
任何带有X、x 和 *的版本号都是有谁存在就匹配谁
*:>=0.0.0
“”: >=0.0.0
1.x: >=1.0.0 <2.0.0
1.2.x: >=1.2.0 <1.3.0
1: >=1.0.0 <2.0.0
1.2: >=1.2.0 <1.3.0
波浪号范围: ~1.2.3 ~1.2 ~1
~1.2.3: >=1.2.3 <1.3.0,
~1.2: >=1.2.0 <1.3.0
~1:>=1.0.0 <2.0.0
~1.2.3-beta.2: >=1.2.3-beta.2 <1.3.0
4. 案列
"devDependencies": {
"antd": "^3.1.4",
"babel-plugin-import": "~1.1.0",
"classnames": "2.2.5",
"qs": "^6.3.0",
"robe-ajax": "^1.0.1",
"expect": "^1.20.2",
"js-cookie": "^2.1.3",
}
- 普通版本号:安装此版本,如 “classnames”: “2.2.5”,表示安装 2.2.5 的版本;
- ~:安装大版本的最小最新子版本,如 “babel-plugin-import”: “~1.1.0”,表示安装 1.1.x 的最新版本(不低于1.1.0),但不安装1.2.x(安装时不改变大版本号和次要版本号);
- ^:安装大版本的最高中版本,如 “antd”: “^3.1.4”,表示安装 3.1.4 及以上的版本,但不安装 4.0.0,(安装时不改变大版本号);