parseVersion
解析语义化版本号字符串,将其转换为结构化对象。
函数签名
typescript
function parseVersion(version: string): Version
function stringifyVersion(version: Version): string
function compareVersions(a: Version, b: Version): number
interface Version {
major: number // 主版本号
minor: number // 次版本号
patch: number // 补丁版本号
prerelease?: string // 预发布标识(可选)
}参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
version | string | 是 | 版本号字符串(如 "1.2.3" 或 "1.2.3-beta.1") |
返回值
| 类型 | 说明 |
|---|---|
Version | 版本对象,包含 major、minor、patch 和可选的 prerelease |
异常
| 错误类型 | 触发条件 | 错误信息 |
|---|---|---|
Error | 版本号格式不符合 Semver 规范 | "无效的版本号格式: {version}" |
工作原理
parseVersion(解析版本)
- 使用正则表达式匹配版本号格式:
/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/ - 匹配失败时抛出错误
- 提取各部分并转换为整数:
- major: 第一组数字
- minor: 第二组数字
- patch: 第三组数字
- prerelease: 可选的预发布标识(如 "beta.1")
- 返回 Version 对象
stringifyVersion(转换为字符串)
- 构建基础版本字符串:
${major}.${minor}.${patch} - 如果有 prerelease,追加:
-${prerelease} - 返回完整版本字符串
compareVersions(比较版本)
- 依次比较 major、minor、patch
- 任一部分不同,返回比较结果(-1, 0, 1)
- 数字部分都相同时,比较 prerelease:
- 有 prerelease 的版本小于无 prerelease 的版本
- 两个都有 prerelease,按字符串比较
- 返回比较结果:-1(a < b)、0(a = b)、1(a > b)
遵循语义化版本(Semver)规范。