介绍语义化版本控制(SemVer)

SemVer(即语义化版本控制)是一种常用的版本控制方案,用于在软件开发中传达软件包的变化和兼容性。JavaScript生态系统主要通过npm软件包管理器采用了SemVer作为JavaScript软件包的标准版本控制方案。软件包的版本可以在其package.json文件中找到,并且也会显示在npm注册表中。

```json [package.json] { "name": "my-package", "version": "1.0.0" }


## SemVer版本

SemVer版本采用以下**三个数字组件**的格式:

{major}.{minor}.{patch}


每个组件代表对软件所做的特定类型的更改。

- **主要版本**:重大更改,可能会**破坏兼容性**。开发人员在升级之前应仔细阅读文档并针对新版本测试其代码。
- **次要版本**:向后兼容的**添加或改进**,不会破坏与之前版本的兼容性。用户通常可以升级到新的次要版本,而不必担心可能需要修改代码的重大更改。
- **补丁版本**:向后兼容的**错误修复、补丁或维护**发布。补丁版本旨在安全,不应引入新功能或破坏性更改。

以下表格总结了每个组件所代表的不同类型的更改:

| 组件      | 更改类型      | 示例                                       |
| --------- | ------------ | ------------------------------------------ |
| 主要版本  | 不兼容       | 破坏性更改、重写、架构更改                 |
| 次要版本  | 兼容         | 新功能、功能增强                           |
| 补丁版本  | 兼容         | 错误修复、补丁、维护发布                   |

## 发布和预发布版本

软件包的**第一个版本**通常被标记为`1.0.0`。这是因为软件包的初始发布被认为是一个主要版本,而主要版本的第一个版本总是`1.0.0`。以`0.x.x`开头的版本被认为是预发布版本,不适用于生产环境。

此外,SemVer允许在版本号后附加**预发布版本**。这些版本由连字符和一系列字母数字标识符组成,例如`1.0.0-alpha.1`或`1.0.0-beta.2`。预发布版本通常用于表示软件仍在积极开发中,可能还不适用于生产环境。

## 指定要使用的版本

在安装软件包时,您可以通过将版本号附加到软件包名称来指定要使用的版本,如下所示:

```shell
npm install my-package@1.0.0

如果不指定版本,npm将安装软件包的最新版本。您还可以使用^~符号来指定一系列版本。例如,^1.0.0将安装与1.0.0兼容的软件包的最新版本。类似地,~1.0.0将安装与1.0.0兼容且具有相同主要版本的软件包的最新版本。以下是指定版本的不同方式的简要总结:

  • 精确版本:1.0.4
  • 补丁版本:1.01.0.x~1.0.4
  • 次要版本:11.x^1.0.4

请注意,您还可以通过直接编辑package.json文件来更改每个依赖项的版本。只需记住在对package.json文件进行任何更改后运行npm install即可。