Nodejs 语义化版本控制

17 Mar 2025 | 4 分钟阅读

您应该升级包的版本,以提高 JavaScript 环境的可靠性和安全性。

语法

JSON 文件遵循语义化版本控制的定义。

说明

  • 补丁 - 补丁用于更新,旨在修复已存在的问题。它与 Node.js 或 NPM 向后兼容。您可以放心地更新,而不用担心当前使用的库会因此中断。
  • 次要版本 - 更新会在新的 NPM 版本中添加新功能。它也向后兼容,可以称为次要更新。
  • 主版本 - 主版本更新与 Node.js 中的其他类型更新有很大不同。它不向后兼容。升级到新的主版本会涉及破坏性更改,可能会导致您先前版本的代码出现问题。重大更新表示修改实质上很大,并有可能改变库的整个结构和操作。

命令

您可以在下面使用语法值。

  • "1" 是主版本。
  • "0" 是次要版本。
  • "1" 是补丁版本。

对于任何新包,推荐的起始版本是 1.0.0。

  • 当您进行一个或多个向后兼容的错误修复时,将第三个数字增加到 1.0.1,版本为 1.0.0。
  • 当添加向后兼容的新功能时,您会增加中间的数字并将第三个数字设置为零,例如 1.1.0。
  • 相反,当您进行与先前版本不兼容的修改时,会增加第一个数字并将中间和最后一个数字设置为零,例如 2.0.0。
Nodejs semantic versioning

Npm 语义化版本控制

语义化版本控制的计算将在下一节中进行描述。

1) 插入符号或 "^"

当您安装新包后,npm 提供的默认前缀是插入符号。它允许您获得当前可用的最新次要版本,并拥有其最大补丁版本。

命令

  • ^1.10.1 可能会导致 1.11.2。

2) 波浪号或 "~"

波浪号前缀仅会更新补丁版本,因此您将始终获得当前次要版本的最新补丁。

命令

  • ~1.5.12 可能会导致 1.5.13。

3) 比较运算符

比较运算符 >, <, =, >=, 和 <= 用于指示稳定版本的范围。

您还可以使用连字符 (-) 来指示范围。

连字符两侧需要有空格。

4) 预发布版本

使用 npm 标签来指定预发布版本,例如 alpha 和 beta。

您可以使用 '>' 等比较符和一个预发布标签来指定预发布版本的范围。

5) 包含多个版本集

使用 "||" 运算符包含多个 npm 版本集。

命令

6) 使用 x 符号

在版本号后使用 x 符号表示 npm 中的任何版本。例如,1.x 表示主版本为 1 的所有版本,如 1.0.0、1.0.2、1.8.2、1.9.20 等。

在锁定文件中

锁定文件的名称和结构将允许您识别它。它将被命名为 package-lock。想象一个只有在您执行代码时才会出现,并且您的其他开发同事无法重现的 bug。这就是在团队协作时,您与其他同事共享依赖项时可能遇到的情况。当您使用多个版本的依赖项时,就可能发生这种情况。

锁定文件拯救一切!

如果您有锁定文件,npm 会在安装依赖项之前验证锁定文件中的所有版本。假设新开发人员共享同一个锁定文件,他们将获得与原始开发人员完全相同的版本。

如果您希望保持同一项目所有团队成员之间的一致性,则必须将锁定文件上传到 git。

更新 NPM

您必须使用 "npm update" 命令将依赖项更新到其最大版本(在提供的范围内)。此命令尊重语义化版本控制并使用新安装的版本更新锁定文件,因此团队中的所有开发人员都将能够访问相同的更新后的依赖项。

固定依赖项

依赖项固定是另一种解决不一致性问题的方法。通过删除任何插入符号、波浪号或其他前缀符号,意味着指定一个非常精确的版本而不是一系列版本。示例:如果您写 1.2.3,它将始终是 1.2.3。通过这种方法,开发人员将始终拥有相同的版本。

结论

Node.js 语义化版本控制用于使用新功能操作所需的版本。