请解释语义化版本控制(即 semver)的含义,并列举常见的版本号范围表示方法。
考察说明
考查对SemVer规范及版本范围语法细节的掌握程度。
回答思路
- 【回答框架 1】语义化版本控制(SemVer)是一种版本号管理规范,格式为主版本号.次版本号.修订号。主版本号变化表示不兼容的API修改,次版本号变化表示向后兼容的功能新增,修订号变化表示向后兼容的问题修复。
- 【回答框架 2】常见的版本号范围表示方法包括:精确版本如1.2.3;波浪号~1.2.3表示允许修订号变化,即>=1.2.3且<1.3.0;脱字符^1.2.3表示允许次版本号和修订号变化,即>=1.2.3且<2.0.0;还有范围如1.2.3 - 2.3.4、通配符如1.2.x和*等。
- 【回答框架 3】在npm、yarn等包管理工具中,^和~是默认使用的范围表示。^允许不兼容的API变化之前的更新,而~限制更严格,只允许补丁版本更新。选择哪种取决于项目对依赖稳定性的需求。
- 【关键点 1】semver格式为主.次.修订,分别对应不兼容修改、向后兼容功能、向后兼容修复。
- 【关键点 2】脱字符^允许次版本和修订版本更新,波浪号~只允许修订版本更新。
- 【关键点 3】范围表示还有精确版本、连字符范围、通配符等多种形式。
- 【易错点 1】不要混淆^和~的语义,^1.2.3允许更新到1.x.x,而~1.2.3只允许更新到1.2.x。
- 【易错点 2】版本范围指定不等于实际安装版本,最终以lockfile锁定版本为准。