semver语义版本号标准 & npm的版本控制器

semver语义版本号标准 & npm的版本控制器

1. 什么是semver

SemVer(语义化版本 Semantic Versioning) 是一种版本命名规范,主要用于软件版本管理,以确保版本号能够清晰表达软件的变化程度和兼容性。

标准地址:semver.org/lang/zh-CN/

2. semver版本格式

  • 主版本号(MAJOR):如果有不兼容的 API 变更,需要升级主版本号。
  • 次版本号(MINOR):如果新增了功能,但向后兼容,需要升级次版本号。
  • 修订号(PATCH):如果仅仅是修复了 bug,且向后兼容,需要升级修订号。

3. 附加标签

除了主版本、次版本和修订号,SemVer 还支持先行版本(pre-release) 和 构建元数据(Build Metadata)。

  • 先行版本(Prerelease):用于标识不稳定版本,如 alpha、beta、rc(Release Candidate),格式 1.0.0-alpha.1,它由 一个短横线 + 一个字符串组成。
  • 构建元数据(Build Metadata):仅用于区分构建,如 1.0.0+20230315

4. 如何检验是否符合规范

可以直接使用 semver 库,它提供了丰富的 SemVer 解析功能。

javascript 复制代码
const semver = require('semver');

console.log(semver.valid("1.0.0"));         // "1.0.0"
console.log(semver.valid("1.2.3-alpha.1")); // "1.2.3-alpha.1"
console.log(semver.valid("v1.0.0"));        // null
console.log(semver.valid("1.0"));           // null
  • semver.valid(version) 返回 合法的版本号 或 null
  • semver.satisfies(version, range) 可用于判断版本范围
javascript 复制代码
console.log(semver.satisfies("1.5.0", ">=1.0.0 <2.0.0")); // true
console.log(semver.satisfies("2.0.0", ">=1.0.0 <2.0.0")); // false

5. NPM 版本控制

NPM(Node Package Manager)中的版本控制是基于 SemVer(语义化版本) 进行的。

5.1 版本号前缀符号

NPM 允许使用前缀符号来指定版本范围:

符号 说明 示例 解析
^ 匹配最新的次版本(MINOR 和 PATCH 可变) "^1.2.3" 允许 1.x.x(>=1.2.3 <2.0.0)
~ 匹配最新的修订号(仅 PATCH 可变) "~1.2.3" 允许 1.2.x(>=1.2.3 <1.3.0)
> 大于某个版本 ">1.2.3" 允许 1.2.4 及以上
< 小于某个版本 "<1.2.3" 仅允许 1.2.2 及以下
>= 大于等于某个版本 ">=1.2.3" 允许 1.2.3 及以上
<= 小于等于某个版本 "<=1.2.3" 允许 1.2.3 及以下
- 版本范围 "1.2.3 - 1.3.0" 允许 1.2.3 到 1.3.0
* 任意版本 "*" 允许所有版本
latest 最新版本 "latest" 安装最新发布的版本

示例

  • "lodash": "^4.17.20"
    • 允许 4.17.x,但不会升级到 5.x.x
  • "express": "~4.17.1"
    • 允许 4.17.x,但不会升级到 4.18.0 或 5.x.x
相关推荐
u01110267527 分钟前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
福兮说41 分钟前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
libokaifa1 小时前
把语音模型塞进手机:sherpa-onnx 在 Android 上的 ASR / TTS
前端
deli0071 小时前
DLA 枝晶生长实测:5000 个粒子集体停摆之后,分形维数收敛到 1.70
前端
IT_陈寒1 小时前
Redis卡顿的锅,这次真不是大key的错
前端·人工智能·后端
可乐鸡翅yeah_2 小时前
video.js 集成 hls.js 开发 M3U8 播放器,新手高频踩坑
开发语言·前端·javascript·后端·ecmascript·m3u8·音视频在线播放
程序猿追2 小时前
HarmonyOS 6 上做个极简浏览器:Web 组件 + 前进后退 + 加载进度
前端·华为·harmonyos
沐沐师2 小时前
Mybatis 框架教程
前端
三天不学习2 小时前
Tailwind CSS 快速入门(2026 版):从 v4 零配置上手,到「该不该用、怎么用好」的选型实战
前端·css·tailwind
明月_清风2 小时前
面对陌生的 GitHub 项目无从下手?这 4 个网站帮你快速读懂源码
前端·后端·github