/** * 比较版本号 * 如果版本为空,则算做为 0 * @example * versionCompare("1.0.0", "2.0") // -1 * versionCompare("2.0.0", "2.0.0") // 0 * versionCompare("3.0.0", "1.2.0") // 1 * versionCompare("3.0.0-beta", "2.2.0") // 1 */ export function versionCompare(ver1: string | number | undefined | null, ver2: string | number | undefined | null) { if (typeof ver1 === "number") { ver1 = ver1.toString() } else if (ver1 == undefined) { ver1 = "0" } if (typeof ver2 === "number") { ver2 = ver2.toString() } else if (ver2 == undefined) { ver2 = "0" } let _ver1 = ver1.split("-")[0] let _ver2 = ver2.split("-")[0] let v1 = _ver1.split(".") let v2 = _ver2.split(".") let len = Math.max(v1.length, v2.length) for (let i = 0; i < len; i++) { let n1 = parseInt(v1[i] || "0") let n2 = parseInt(v2[i] || "0") if (n1 > n2) { return 1 } else if (n1 < n2) { return -1 } } return 0 } /** 判断版本是否大于最小版本(给定版本 >= 目标版本) * 如果版本为空,则算做为 0 * @example * let ver = "2.0" * versionMin("2.0", ver) // true * versionMin("2.0.0", ver) // true * versionMin("1.0.0", ver) // false */ export function versionMin( baseVersion: string | number | undefined | null, nowVersion: string | number | undefined | null ) { return versionCompare(nowVersion, baseVersion) >= 0 } /** 判断版本是否小于最大版本(给定版本 <= 目标版本) * 如果版本为空,则算做为 0 * @example * let ver = "2.0" * versionMax("2.0", ver) // true * versionMax("2.0.0", ver) // true * versionMax("1.0.0", ver) // false */ export function versionMax( baseVersion: string | number | undefined | null, nowVersion: string | number | undefined | null ) { return versionCompare(nowVersion, baseVersion) <= 0 }