-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
61c2775
commit 98dd9d3
Showing
4 changed files
with
109 additions
and
214 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
function parseVersion (version) { | ||
const matched = version.match(/^v?(\d{1,2}(?:\.\d{1,2})*)(.*)$/) | ||
return { | ||
versions: matched[1].split('.'), // 版本号数组 | ||
pre: matched[2], // 预发布版本号 | ||
} | ||
} | ||
|
||
/** | ||
* 比较版本号 | ||
* | ||
* @param onlineVersion 线上版本号 | ||
* @param currentVersion 当前版本号 | ||
* @param log 日志对象 | ||
* @returns {number} 比较线上版本号是否为更新的版本,大于0=是|0=相等|小于0=否|-999=出现异常,比较结果未知 | ||
*/ | ||
export function isNewVersion (onlineVersion, currentVersion, log = console) { | ||
if (onlineVersion === currentVersion) { | ||
return 0 | ||
} | ||
|
||
try { | ||
const onlineVersionObj = parseVersion(onlineVersion) | ||
const curVersionObj = parseVersion(currentVersion) | ||
|
||
const { versions: versions1 } = onlineVersionObj | ||
const { versions: versions2 } = curVersionObj | ||
|
||
if (versions1.length !== versions2.length) { | ||
// 短的数组补0 | ||
if (versions1.length < versions2.length) { | ||
for (let i = versions1.length; i < versions2.length; i++) { | ||
versions1.push('0') | ||
} | ||
} else if (versions1.length > versions2.length) { | ||
for (let i = versions2.length; i < versions1.length; i++) { | ||
versions2.push('0') | ||
} | ||
} | ||
} | ||
|
||
// 版本数组比对 | ||
for (let i = 0; i < versions1.length; i++) { | ||
if (versions1[i] > versions2[i]) { | ||
return i + 1 // 为新版本,需要更新 | ||
} else if (versions1[i] < versions2[i]) { | ||
return -(i + 1) // 为旧版本,无需更新 | ||
} | ||
} | ||
|
||
// 版本号相同,继续比对预发布版本号 | ||
if (onlineVersionObj.pre && curVersionObj.pre) { | ||
// 都为预发布版本时,直接比较预发布版本号字符串的大小 | ||
if (onlineVersionObj.pre > curVersionObj.pre) { | ||
return 101 | ||
} else if (onlineVersionObj.pre < curVersionObj.pre) { | ||
return -101 | ||
} | ||
} else if (!onlineVersionObj.pre && curVersionObj.pre) { | ||
// 线上为正式版本,当前版本为预发布版本,需要更新 | ||
return 102 | ||
} else if (onlineVersionObj.pre && !curVersionObj.pre) { | ||
// 线上为预发布版本,当前版本为正式版本,无需更新 | ||
return -102 | ||
} | ||
|
||
return 0 // 相同版本,无需更新 | ||
} catch (e) { | ||
(log || console).error(`比对版本失败,当前版本号:${currentVersion},线上版本号:${onlineVersion}, error:`, e) | ||
return -999 // 比对异常 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
const assert = require('node:assert') | ||
const { isNewVersion } = require('../src/utils/util.version.js') | ||
|
||
function testIsNewVersion (onlineVersion, currentVersion, expected) { | ||
const ret = isNewVersion(onlineVersion, currentVersion) | ||
console.log(ret >= 0 ? ` ${ret}` : `${ret}`) | ||
assert.strictEqual(ret, expected) | ||
} | ||
|
||
testIsNewVersion('2.0.0', '2.0.0', 0) | ||
|
||
testIsNewVersion('2.0.0', '1.0.0', 1) | ||
testIsNewVersion('1.0.0', '2.0.0', -1) | ||
|
||
testIsNewVersion('2.1.0', '2.0.0', 2) | ||
testIsNewVersion('2.0.0', '2.1.0', -2) | ||
|
||
testIsNewVersion('2.0.1', '2.0.0', 3) | ||
testIsNewVersion('2.0.0', '2.0.1', -3) | ||
|
||
testIsNewVersion('2.0.0.1', '2.0.0', 4) | ||
testIsNewVersion('2.0.0', '2.0.0.1', -4) | ||
|
||
testIsNewVersion('2.0.0.9.1', '2.0.0.9', 5) | ||
testIsNewVersion('2.0.0.9', '2.0.0.9.1', -5) | ||
|
||
testIsNewVersion('2.0.0-RC2', '2.0.0-RC1', 101) | ||
testIsNewVersion('2.0.0-RC1', '2.0.0-RC2', -101) | ||
|
||
testIsNewVersion('2.0.0', '2.0.0-RC1', 102) | ||
testIsNewVersion('2.0.0-RC1', '2.0.0', -102) | ||
|
||
testIsNewVersion('2.0.0.0', '2.0.0', 0) | ||
|
||
testIsNewVersion('x', 'v', -999) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.