什么是语义化版本?

兄弟姐妹,哪位知道,什么是语义化版本?
最新回答
冭儍冭迗眞

2026-10-31 13:36:12

语义化版本的概念是由Gravatars 创办者兼 GitHub 共同创办者 Tom Preston-Werner 所建立的一个版本规范,它旨在解决在大型项目中对依赖的版本失去控制的问题,如害怕不兼容而不愿更新依赖。此规范已被广泛接受,Node.js 的包管理工具 npm 就完全基于此规范来管理依赖的版本。
Semantic Versioning(SemVer)是语义化版本的一个具体实现,由 npm 团队维护,用于解析、计算和比较版本及版本范围。SemVer 使用主版本号.次版本号.修订号(MAJOR.MINOR.PATCH)的格式表示,版本号递增规则如下:主版本号、次版本号、修订号分别递增。先行版本号和版本编译信息可以作为主版本号.次版本号.修订号的延伸。
SemVer 的版本控制规范如下:
1. 所有使用语义化版本控制的软件必须定义公共 API,无论以何种形式,都力求精确和完整。
2. 标准的版本号采用 X.Y.Z 格式,其中 X、Y、Z 分别为主版本号、次版本号和修订号,均为非负整数,无需前补零。
3. 发行的版本号在软件发布后禁止改变,所有修改必须以新版本发行。
4. 主版本号为零的软件处于开发初期,可能随时改变,公共 API 不视为稳定。
5. 1.0.0.0 版本界定公共 API 的形成,之后的版本基于公共 API 和修改内容进行更新。
6. 修订号在只进行向下兼容修正时递增,修正指内部错误修正。
7. 次版本号在有向下兼容的新功能出现时递增,公共 API 功能标记为弃用时也递增。内部程序大量新功能加入时可以递增,修订级别的改变也可以。
8. 主版本号在不兼容修改加入公共 API 时递增,包括次版本号和修订级别的改变。每次主版本号递增,次版本号和修订号归零。
9. 先行版本号可以标注在修订版之后,用连接号和点分隔的标识符修饰,标识符由 ASCII 字母数字和连接号组成,禁止留白。数字型标识符禁止前补零。先行版本表示版本不稳定,可能无法满足兼容性需求。
10. 版本编译信息可以标注在修订版或先行版本号之后,使用加号和点分隔的标识符修饰,同样由 ASCII 字母数字和连接号组成,禁止留白。在判断优先层级时,版本编译信息可忽略。
11. 版本优先层级通过拆分版本为主版本号、次版本号、修订号和先行版本号进行比较。主版本号、次版本号、修订号以数值比较,先行版本号优先层级比较低,栏位多的优先层级更高。