cheatsheets/semver.md

96 lines
2.7 KiB
Markdown

---
title: Semver
updated: 2019-12-31
weight: -3
---
### Semver
Given a version number `MAJOR.MINOR.PATCH`:
{: .-setup}
| `MAJOR` | incompatible API changes |
| `MINOR` | add functionality (backwards-compatible) |
| `PATCH` | bug fixes (backwards-compatible) |
### Simple ranges
1.2.3
=1.2.3
>1.2.3
<1.2.3
>=1.2.3
Note that suffixed versions (`1.2.3-rc1`) are not matched.
### Ranges
| Range | Description | Notes |
| --- | --- | --- |
| `~1.2.3` | is `>=1.2.3 <1.3.0` | |
| --- | --- | --- |
| `^1.2.3` | is `>=1.2.3 <2.0.0` | |
| `^0.2.3` | is `>=0.2.3 <0.3.0` | (0.x.x is special) |
| `^0.0.1` | is `=0.0.1` | (0.0.x is special) |
| --- | --- | --- |
| `^1.2` | is `>=1.2.0 <2.0.0` | (like ^1.2.0) |
| `~1.2` | is `>=1.2.0 <1.3.0` | (like ~1.2.0) |
| --- | --- | --- |
| `^1` | is `>=1.0.0 <2.0.0` | |
| `~1` | same | |
| `1.x` | same | |
| `1.*` | same | |
| `1` | same | |
| --- | --- | --- |
| `*` | any version | |
| `x` | same | |
{: .-shortcuts}
### Hyphenated ranges
| Range | Description |
| --- | --- |
| `1.2.3 - 2.3.4` | is `>=1.2.3 <=2.3.4` |
#### Partial right
| Range | Description |
| --- | --- |
| `1.2.3 - 2.3` | is `>=1.2.3 <2.4.0` |
| `1.2.3 - 2` | is `>=1.2.3 <3.0.0` |
#### Partial left
| Range | Description |
| --- | --- |
| `1.2 - 2.3.0` | is `1.2.0 - 2.3.0` |
When the right is partial (eg, `2.3`), missing pieces are assumed to be `x` (eg, `2.3.x`).
When the left is partial (eg, `1.2`), missing pieces are assumed to be `0` (eg, `1.2.0`).
### Combining ranges
| Range | Description |
| --- | --- |
| `>=0.14 <16` | And (space-separated) |
| `0.14.x || 15.x.x` | Or (pipe-separated) |
### Pre-releases
1.2.3-prerelease+build
### Explanation
| `^` | means "compatible with" |
| `~` | means "reasonably close to" |
| `0.x.x` | is for "initial development" |
| `1.x.x` | means public API is defined |
{: .-shortcuts}
## References
{: .-one-column}
* <https://semver.org/>
* <https://docs.npmjs.com/misc/semver>