语义化版本的概念是由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. 版本优先层级通过拆分版本为主版本号、次版本号、修订号和先行版本号进行比较。主版本号、次版本号、修订号以数值比较,先行版本号优先层级比较低,栏位多的优先层级更高。