Semver 语义化版本速查指南:版本号、范围表达式与 npm 工程实践
Semver 语义化版本速查指南版本号、范围表达式与 npm 工程实践【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址: https://gitcode.com/jaywcjlove/referenceSemantic Versioning语义化版本简称 Semver是现代软件工程中管理版本号语义的通用规范它让1.2.3这样的版本号不只是一种标记而成为可被工具解析、可被团队约定的契约。本文以 docs/semver.md 为主体系统讲解 Semver 的三段式版本结构、主/次/修订号的含义、npm 生态中最常用的范围匹配语法^、~、连字符、通配符与组合范围并结合本仓库中package.json、npm、lerna 等文档交叉印证实际用法。读完本文你将能读懂并编写任何package.json中的版本约束准确判断^1.2.3与~1.2.3的区别并理解预发布版本在匹配规则中的边界行为。语义化版本标准介绍Semver 是一种语义版本控制规范其全称规范由 semver.org 发布用于回答版本号应该怎么涨、怎么表达兼容性这一核心问题。本仓库的 Semver 备忘清单 以速查表的形式浓缩了该规范及 npm 语义版本器的常用语法适合日常查表使用。语义版本控制规范文档(semver.org)npm 的语义版本器(npmjs.com)版本号三段式结构一个标准的语义化版本号由三部分组成主版本号(MAJOR).次版本号(MINOR).修订号(PATCH)各自代表不同的变更含义字段含义主版本号(MAJOR)当你做了不兼容的 API 修改时递增次版本号(MINOR)当你做了向下兼容的功能性新增时递增修订号(PATCH)当你做了向下兼容的问题修正时递增这一约定的价值在于版本号本身就携带了兼容性信息。依赖方只需看主版本号是否变化就能判断升级是否需要修改代码发布方只要遵守规则就不会在1.x内悄悄破坏 API。本仓库自身的版本管理即遵循该规范见根目录 package.json 中的version: 1.46.0字段docs/package.json.md 也明确说明version字段是包的当前版本严格遵循 Semantic Versioning 2.0.0 语义化版本规范。简单范围Simple Ranges在声明依赖时我们经常只需要表达某个版本之上/之下的简单约束这类写法称为简单范围1.2.3 1.2.3 1.2.3 1.2.3 1.2.3含义如下不带任何运算符如1.2.3等价于1.2.3只匹配精确版本1.2.3/1.2.3/1.2.3分别表示大于、小于、大于等于某个版本多个简单范围可用空格组合例如1.0.2 2.1.2表示大于等于 1.0.2 且小于 2.1.2。请注意后缀版本如1.2.3-rc1不匹配简单范围。也就是说1.2.3-rc1既不等于1.2.3也不满足1.2.3预发布版本拥有独立的匹配规则见下文预发布一节。范围Rangesnpm 语义版本器为依赖声明提供了一组更聪明的范围语法其中~和^是最常用的两个运算符。下表是速查清单中的完整对应关系范围描述Notes~1.2.3是1.2.3 1.3.0^1.2.3是1.2.3 2.0.0^0.2.3是0.2.3 0.3.0(0.x.x 是特殊的)^0.0.1是0.0.1(0.0.x 是特殊的)^1.2是1.2.0 2.0.0(像 ^1.2.0)~1.2是1.2.0 1.3.0(像 ~1.2.0)^1是1.0.0 2.0.0~1相同的1.x相同的1.*相同的1相同的*任何版本x相同的解读要点^caret表示兼容允许在不改变最左侧非零数字的前提下更新版本。因此^1.2.3允许升到1.9.9但不会跨入2.0.0。0.x.x是特殊情况按 Semver 约定0.x阶段意味着初始开发公共 API 尚未稳定。因此^0.2.3被收紧为0.2.3 0.3.0而^0.0.1直接被限定为0.0.1。~tilde表示相当接近只允许修订号PATCH级别的更新~1.2.3即1.2.3 1.3.0。省略写法^1、~1、1.x、1.*、1五种写法语义一致都表示1.0.0 2.0.0*与x表示任何版本。1.x与1.*的等价关系x是*的别名二者在范围表达中含义相同。在本仓库 docs/package.json.md 的dependencies示例中可以看到这些语法的真实组合用法{ dependencies: { colors: *, foo: 1.0.0 - 2.9999.9999, bar: 1.0.2 2.1.2, baz: 1.0.2 2.3.4, boo: 2.0.1, qux: 1.0.0 || 2.3.1 2.4.5 || 2.5.2 3.0.0, asd: http://asdf.com/asdf.tar.gz, til: ~1.2, elf: ~1.2.3, two: 2.x, thr: 3.3.x, lat: latest, dyl: file:./path/to/dyl, pla: https://github.com/user/project/tarball/branch, stu: git://github.com/user/project.git#commit-ish } }连字符范围Hyphen Ranges连字符范围用于表达从一个版本到另一个版本的闭区间约束范围描述1.2.3 - 2.3.4是1.2.3 2.3.4当某一侧只写了部分版本号时规则如下部分向右范围描述1.2.3 - 2.3是1.2.3 2.4.01.2.3 - 2是1.2.3 3.0.0部分向左范围描述1.2 - 2.3.0是1.2.0 - 2.3.0记忆口诀当右侧为部分例如2.3时假定缺失的部分为x例如2.3.x所以1.2.3 - 2.3实际是1.2.3 2.4.0上限把2.3.x整段包含进去如果左边是部分的例如1.2则假定缺少的部分为0例如1.2.0所以1.2 - 2.3.0等价于1.2.0 - 2.3.0。有效的语义版本并非所有字符串都是合法版本号。语义化版本允许在主.次.修订之后追加预发布标识符-prerelease与构建元数据meta以下均为有效的语义版本示例0.0.4 1.2.3 10.20.30 1.1.2-prereleasemeta 1.1.2meta 1.1.2meta-valid 1.0.0-alpha 1.0.0-beta 1.0.0-alpha.beta 1.0.0-alpha.beta.1 1.0.0-alpha.1 1.0.0-alpha0.valid 1.0.0-alpha.0valid 1.0.0-alpha-a.b-c-somethinglongbuild.1-aef.1-its-okay 1.0.0-rc.1build.1 2.0.0-rc.1build.123 1.2.3-beta 10.2.3-DEV-SNAPSHOT 1.2.3-SNAPSHOT-123 1.0.0 2.0.0 1.1.7 2.0.0build.1848 2.0.1-alpha.1227 1.0.0-alphabeta 1.2.3----RC-SNAPSHOT.12.9.1--.12788 1.2.3----R-S.12.9.1--.12meta 1.2.3----RC-SNAPSHOT.12.9.1--.12 1.0.00.build.1-rc.10000aaa-kk-0.1 99999999999999999999999.999999999999999999.99999999999999999 1.0.0-0A.is.legal观察这些示例可以提炼出几条规律数字可以很大如10.20.30、99999999999999999999999.999999999999999999.99999999999999999均合法预发布标识符用-连接可包含点号分隔的多段如alpha.beta.1段内可用连字符如a-b-c-somethinglong构建元数据用连接只出现在版本末尾如meta、build.1848且不参与版本优先级比较大小写敏感但合法10.2.3-DEV-SNAPSHOT、1.0.0-0A.is.legal都符合规范甚至1.2.3----RC-SNAPSHOT.12.9.1--.12这种奇形怪状但符合 ABNF 语法的版本也是有效的——这正是语义化版本号验证正则表达式存在的意义。清单末尾附有两条正则参考按编号提取语言的验证正则、按组名称提取语言的验证正则。组合范围实际工程的依赖约束往往不止一个区间可以通过**空格AND和双竖线||OR**组合出复杂的范围范围描述0.14 16和 (空格分隔)0.14.x \|\| 15.x.x或 (双竖线分隔)空格表示并且0.14 16要求版本同时满足0.14与16||表示或者0.14.x || 15.x.x表示匹配0.14.x或15.x.x任意一个区间二者可以自由嵌套例如上文dependencies示例中的qux: 1.0.0 || 2.3.1 2.4.5 || 2.5.2 3.0.0就是一个三段 OR 组合。本仓库 .github/workflows/ci.yml 中的发布流程也体现了版本语义的应用CI 通过create-tag-action创建版本标签再以steps.changelog.outputs.version作为 Docker 镜像的 tagwcjiang/reference:${version}进行发布可见语义化版本已贯通到标签 → 发布 → 镜像版本的自动化链路。解释四个高频符号/写法的语义速记范围描述^意思是兼容~意思是相当接近0.x.x用于初始开发1.x.x表示定义了公共 API实践含义依赖库主版本为1.x时^1.2.3可以放心使用——说明该库已经定义了公共 API次版本内的升级不会破坏兼容性依赖库处于0.x初始开发时即使使用^0.2.3也只会允许0.2.x范围内的更新避免被不兼容的0.3.0波及~1.2.3这类相当接近的约束适合对稳定性要求较高的场景仅接受补丁级更新。预发布预发布版本在版本号之后用-追加用于正式发布前的候选测试alpha、beta、rc 等1.2.3-prereleasebuild 1.1.2-prereleasemeta关于预发布需要记住两点预发布版本优先级低于对应正式版本1.0.0-alpha 1.0.0-beta 1.0.0-rc.1 1.0.0这是 Semver 规范规定的比较顺序预发布版本不满足普通范围匹配如前文简单范围所述1.2.3-rc1不匹配1.2.3或1.2.3这类普通范围。不过 docs/package.json.md 中提到一个 npm 的实际例外npm 允许预发布版本匹配未明确指定预发布的 semver 范围——例如1.4.0-rc.0可以匹配1.3.0这与典型的 semver 严格检查行为不同。这意味着npm install默认情况下也可能把预发布版本解析进来生产环境如需严格锁定应结合 lock 文件或精确版本声明。在 npm 生态中的实战运用Semver 范围语法在 npm 生态中无处不在本仓库的多个文档可以交叉印证1.package.json依赖声明docs/package.json.md 规定包的version字段必须严格遵循 Semantic Versioning 2.0.0dependencies、devDependencies、peerDependencies等字段中的版本值均使用 semver 范围语法例如devDependencies: { package-2: ^0.4.2 }、peerDependencies: { package-3: ^2.7.18 }overrides字段可以覆盖传递依赖的版本如foo: 1.0.0用于替换存在已知安全问题的依赖版本。2.npm install时的范围指定docs/npm.md 展示了如何在安装命令中直接声明版本约束npm i sax # NPM 包默认范围 npm i saxlatest # 指定标签 最新 npm i sax3.0.0 # 指定版本 3.0.0 npm i sax1 2.0 # 指定版本范围 npm i org/sax # 范围内的 NPM 包其中npm i sax1 2.0正是组合范围AND的实战应用。若想跳过范围运算符、以精确版本保存依赖可使用-E--save-exact参数——docs/npm.md 明确说明它将使用精确的版本进行配置而不是使用 npm 默认的 semver 范围运算符。3. 发布与升版本npm version version用于更改package.json中的版本号见 docs/npm.md在 monorepo 场景中docs/lerna.md 展示了lerna version patch这类 semver 关键字升版方式其中patch、minor、major、premajor、preminor、prepatch、prerelease都是标准的语义化版本递增关键字docs/lerna.md 也提醒--exact参数会在更新的包中精确指定依赖版本如1.0.1而不是默认的^semver 范围如^1.0.1——这与 npm 的-E参数思路一致。4. 一个直观的换算练习把本文的所有规则串起来package.json中常见的声明可以这样理解express: ^4.17.1 // 4.17.1 5.0.0允许次版本与修订号更新 lodash: ~4.17.21 // 4.17.21 4.18.0仅允许修订号更新 typescript: ^5.0.0 // 5.0.0 6.0.0 react: 17.0.0 18.0.0 // 显式双边界总结版本号即契约主.次.修订分别对应不兼容修改、兼容新增、兼容修复0.x 代表初始开发阶段范围语法有章可循^兼容、~接近、连字符定闭区间、x/*通配、空格 AND、||OR全部规则浓缩在 docs/semver.md 这张速查表中预发布要小心普通范围不匹配预发布版本但 npm 存在允许预发布匹配的例外贯穿工程全流程从 package.json 的依赖声明、npm install的版本参数到 lerna 的升版关键字与 CI 的标签发布语义化版本是贯穿始终的工程约定。【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址: https://gitcode.com/jaywcjlove/reference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

网络运维述职报告怎么写:数据准备与五段式结构全解析

网络运维述职报告怎么写:数据准备与五段式结构全解析

简介:网络运维部优秀述职报告范文.docx 是一份可直接编辑套用的 Word 述职报告模板,适合网络运维工程师、部门主管及行政人事人员参考,用于快速撰写结构完整、数据量化的年度或半年度述职材料。文档以真实岗位职责为蓝本,围绕交换…

2026/9/23 21:09:54 阅读更多 →
螺杆空压机安装配管与故障排查:从原理到保养的完整操作指南

螺杆空压机安装配管与故障排查:从原理到保养的完整操作指南

简介:面向工业制造、建筑工程与矿山开发等领域的设备管理与维修人员,这份开山螺杆空压机说明书是一份完整的机组操作与维护指导文档。资源为单个 doc 文件,压缩包大小仅 176KB,便于下载后直接打印或按章节查阅。文档从产品规格、机…

2026/9/23 21:08:52 阅读更多 →
Python车牌识别实战:从OpenCV定位到LPRNet识别全流程解析

Python车牌识别实战:从OpenCV定位到LPRNet识别全流程解析

简介:这是一份面向Python开发者的车牌识别参考项目源码包,整合了PyQt5界面与OpenCV图像处理库,适合正在学习图像处理、模式识别或智能交通应用开发的读者,也可作为课程设计与毕业设计的参考资料。资源共2000个文件,其中…

2026/9/23 21:08:51 阅读更多 →

最新新闻

Tyk Coprocess 插件框架实战:使用 Python、Lua 与 gRPC 编写自定义 API 中间件

Tyk Coprocess 插件框架实战:使用 Python、Lua 与 gRPC 编写自定义 API 中间件

Tyk Coprocess 插件框架实战:使用 Python、Lua 与 gRPC 编写自定义 API 中间件 【免费下载链接】tyk Open Source API and AI Gateway supporting REST, GraphQL, TCP, gRPC and MCP (Model Context Protocol) 项目地址: https://gitcode.com/gh_mirrors/ty/tyk …

2026/9/23 21:57:51 阅读更多 →
OpenCV人脸识别考勤系统实战:从环境搭建到防代打卡

OpenCV人脸识别考勤系统实战:从环境搭建到防代打卡

简介:这份资源是面向高校学生与Python初学者的OpenCV人脸识别考勤系统完整项目源码,适合作为课程设计、期末大作业或自学计算机视觉的实战参考。项目围绕考勤管理场景,实现了用户注册登录、人脸检测与识别、打卡记录及数据查询等核心模块&…

2026/9/23 21:57:51 阅读更多 →
Vector VN5000车载以太网接口盒:选型、配置与测试链路部署

Vector VN5000车载以太网接口盒:选型、配置与测试链路部署

简介:《Vector VN5000系列设备手册》面向电子工程师、网络技术人员、自动化系统集成商与设备运维人员,聚焦工业与商业场景中对高性能以太网接口的部署需求。内容覆盖VN5601、VN5610A、VN5611、VN5612、VN5620等常用型号,逐一说明透明以太网监…

2026/9/23 21:57:51 阅读更多 →
Apache Druid 实验性特性(Experimental Features)完全指南:状态定义、判定标准与仓库实例

Apache Druid 实验性特性(Experimental Features)完全指南:状态定义、判定标准与仓库实例

Apache Druid 实验性特性(Experimental Features)完全指南:状态定义、判定标准与仓库实例 【免费下载链接】druid Apache Druid: a high performance real-time analytics database. 项目地址: https://gitcode.com/gh_mirrors/druid6/drui…

2026/9/23 21:57:51 阅读更多 →
2026 进口力传感器报价区间是多少?工业高精度力传感器哪家靠谱

2026 进口力传感器报价区间是多少?工业高精度力传感器哪家靠谱

摘要:2026年工业精密传感、机器人测试、航空航天等领域对高精度进口力传感器的采购需求持续增长,多数采购人员、研发人员重点关注产品真实报价区间、品牌资质及供货服务能力。本文结合市场现货情况与正规代理渠道信息,详解进口高精度FUTEK力传感器报价、产品参数、应用场景,并介…

2026/9/23 21:57:51 阅读更多 →
AnimeGANv2人脸动漫化:PyTorch推理全链路与源码实战

AnimeGANv2人脸动漫化:PyTorch推理全链路与源码实战

简介:这份资源面向想入门AIGC图像风格迁移的开发者与学习者,提供基于PyTorch实现的人脸动漫化算法AnimeGANv2完整项目,帮助理解生成对抗网络在真实人脸到动漫风格转换中的落地方式。压缩包共18个文件、约35.9MB,包含4个py脚本用于…

2026/9/23 21:56:51 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →