Semver 备忘清单
===

这个 semver 语义化版本快速参考备忘清单。

语义化版本标准
----

### 介绍

[Semver](http://semver.org/) 是一种语义版本控制规范。

- [语义版本控制规范文档](http://semver.org/) _(semver.org)_
- [npm 的语义版本器](https://docs.npmjs.com/cli/v6/using-npm/semver) _(npmjs.com)_

### Semver

| -               | -                      |
|-----------------|------------------------|
| `主版本号(MAJOR)` | 当你做了不兼容的 API 修改 |
| `次版本号(MINOR)` | 当你做了向下兼容的功能性新增 |
| `修订号(PATCH)` | 当你做了向下兼容的问题修正 |

### 简单范围

```
  1.2.3
 =1.2.3
 >1.2.3
 <1.2.3
>=1.2.3
```

请注意,后缀版本(`1.2.3-rc1`)不匹配。

### 范围
<!--rehype:wrap-class=row-span-3-->

| 范围    | 描述         | Notes             |
| ---      | ---                 | ---               |
| `~1.2.3` | 是 `>=1.2.3 <1.3.0` |                    |
| `^1.2.3` | 是 `>=1.2.3 <2.0.0` |                    |
| `^0.2.3` | 是 `>=0.2.3 <0.3.0` | (0.x.x 是特殊的) |
| `^0.0.1` | 是  `=0.0.1`        | (0.0.x 是特殊的) |
| `^1.2`   | 是 `>=1.2.0 <2.0.0` | (像 ^1.2.0)        |
| `~1.2`   | 是 `>=1.2.0 <1.3.0` | (像 ~1.2.0)        |
| `^1`     | 是 `>=1.0.0 <2.0.0` |                    |
| `~1`     | 相同的               |                    |
| `1.x`    | 相同的               |                    |
| `1.*`    | 相同的               |                    |
| `1`      | 相同的               |                    |
| `*`      | 任何版本             |                    |
| `x`      | 相同的               |                    |
<!--rehype:className=shortcuts-->

### 连字符范围

| 范围               | 描述           |
| ---                | ---                   |
| `1.2.3 - 2.3.4`    | 是 `>=1.2.3 <=2.3.4`  |
<!--rehype:className=shortcuts show-header-->

#### 部分向右

| 范围            | 描述 |
| ---             | --- |
| `1.2.3 - 2.3`   | 是 `>=1.2.3 <2.4.0`   |
| `1.2.3 - 2`     | 是 `>=1.2.3 <3.0.0`   |
<!--rehype:className=shortcuts-->

#### 部分向左

| 范围           | 描述           |
| ---            | ---                   |
| `1.2 - 2.3.0`  | 是 `1.2.0 - 2.3.0`    |
<!--rehype:className=shortcuts-->

当右侧为部分(例如,`2.3`)时,假定缺失的部分为`x`(例如,`2.3.x`)。

如果左边是部分的(例如,`1.2`),则假定缺少的部分为`0`(例如,`1.2.0`)。

### 有效的语义版本
<!--rehype:wrap-class=row-span-4-->

```js
0.0.4
1.2.3
10.20.30
1.1.2-prerelease+meta
1.1.2+meta
1.1.2+meta-valid
1.0.0-alpha
1.0.0-beta
1.0.0-alpha.beta
1.0.0-alpha.beta.1
1.0.0-alpha.1
1.0.0-alpha0.valid
1.0.0-alpha.0valid
1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay
1.0.0-rc.1+build.1
2.0.0-rc.1+build.123
1.2.3-beta
10.2.3-DEV-SNAPSHOT
1.2.3-SNAPSHOT-123
1.0.0
2.0.0
1.1.7
2.0.0+build.1848
2.0.1-alpha.1227
1.0.0-alpha+beta
1.2.3----RC-SNAPSHOT.12.9.1--.12+788
1.2.3----R-S.12.9.1--.12+meta
1.2.3----RC-SNAPSHOT.12.9.1--.12
1.0.0+0.build.1-rc.10000aaa-kk-0.1
99999999999999999999999.999999999999999999.99999999999999999
1.0.0-0A.is.legal
```

### 组合范围

| 范围                | 描述                  |
| ---                | ---                   |
| `>=0.14 <16`       | 和 (空格分隔) |
| `0.14.x \|\| 15.x.x` | 或 (双竖线分隔)   |
<!--rehype:className=shortcuts show-header-->

### 解释
<!--rehype:wrap-class=row-span-2-->

| 范围              | 描述           |
| ---                | ---          |
| `^`     | 意思是“兼容”     |
| `~`     | 意思是“相当接近”     |
| `0.x.x` | 用于“初始开发”     |
| `1.x.x` | 表示定义了公共 API     |
<!--rehype:className=shortcuts-->

### 预发布

```
1.2.3-prerelease+build
1.1.2-prerelease+meta
```

另见
----

- [语义化版本号验证正则表达式,支持按编号提取的语言](https://regex101.com/r/vkijKf/1/)
- [语义化版本号验证正则表达式,支持按组名称提取的语言](https://regex101.com/r/Ly7O1x/3/)