Skip to content

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    // 预发布标识(可选)
}

参数

参数名类型必填说明
versionstring版本号字符串(如 "1.2.3" 或 "1.2.3-beta.1")

返回值

类型说明
Version版本对象,包含 major、minor、patch 和可选的 prerelease

异常

错误类型触发条件错误信息
Error版本号格式不符合 Semver 规范"无效的版本号格式: {version}"

工作原理

parseVersion(解析版本)

  1. 使用正则表达式匹配版本号格式:/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/
  2. 匹配失败时抛出错误
  3. 提取各部分并转换为整数:
    • major: 第一组数字
    • minor: 第二组数字
    • patch: 第三组数字
    • prerelease: 可选的预发布标识(如 "beta.1")
  4. 返回 Version 对象

stringifyVersion(转换为字符串)

  1. 构建基础版本字符串:${major}.${minor}.${patch}
  2. 如果有 prerelease,追加:-${prerelease}
  3. 返回完整版本字符串

compareVersions(比较版本)

  1. 依次比较 major、minor、patch
  2. 任一部分不同,返回比较结果(-1, 0, 1)
  3. 数字部分都相同时,比较 prerelease:
    • 有 prerelease 的版本小于无 prerelease 的版本
    • 两个都有 prerelease,按字符串比较
  4. 返回比较结果:-1(a < b)、0(a = b)、1(a > b)

遵循语义化版本(Semver)规范。