Skip to content

Commit d45750f

Browse files
committed
refactor: 提取 toChromeVersion 为公共函数
将 rspack.config.ts 和 scripts/pack.js 中重复的版本转换逻辑 提取到 scripts/version.js 中复用。
1 parent 7b81b8c commit d45750f

3 files changed

Lines changed: 28 additions & 38 deletions

File tree

rspack.config.ts

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,14 @@ import * as path from "path";
22
import { rspack, NormalModule, type Configuration } from "@rspack/core";
33
import { readFileSync } from "fs";
44
import { v4 as uuidv4 } from "uuid";
5-
import semver from "semver";
5+
import { toChromeVersion } from "./scripts/version.js";
66

77
const pkg = JSON.parse(readFileSync("./package.json", "utf-8"));
88

99
const version = pkg.version;
1010
const dirname = path.resolve();
1111
const isDev = process.env.NODE_ENV === "development";
1212
const isBeta = version.includes("-");
13-
14-
// 将 prerelease 版本号转换为 Chrome 兼容的纯数字格式
15-
// 例如: "1.4.0-beta" -> "1.4.0.1100", "1.4.0-alpha.1" -> "1.4.0.1002"
16-
function toChromeVersion(ver: string): string {
17-
const parsed = semver.parse(ver);
18-
if (!parsed || !parsed.prerelease.length) {
19-
return ver;
20-
}
21-
let betaVersion = 1000;
22-
switch (parsed.prerelease[0]) {
23-
case "alpha":
24-
betaVersion += parseInt(String(parsed.prerelease[1] || "0"), 10) + 1 || 1;
25-
break;
26-
case "beta":
27-
betaVersion += 100 * (parseInt(String(parsed.prerelease[1] || "0"), 10) + 1 || 1);
28-
break;
29-
default:
30-
throw new Error("未知的版本类型");
31-
}
32-
return `${parsed.major}.${parsed.minor}.${parsed.patch}.${betaVersion}`;
33-
}
3413
const isReactTools = process.env.REACT_DEVTOOLS === "true";
3514

3615
// Target browsers, see: https://github.com/browserslist/browserslist

scripts/pack.js

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { execSync } from "child_process";
77
import manifest from "../src/manifest.json" with { type: "json" };
88
import packageInfo from "../package.json" with { type: "json" };
99
import semver from "semver";
10+
import { toChromeVersion } from "./version.js";
1011

1112
// ============================================================================
1213

@@ -26,26 +27,11 @@ const createJSZip = () => {
2627

2728
// 判断是否为beta版本
2829
const version = semver.parse(packageInfo.version);
30+
manifest.version = toChromeVersion(packageInfo.version);
2931
if (version.prerelease.length) {
30-
// 替换manifest中的版本
31-
let betaVersion = 1000;
32-
switch (version.prerelease[0]) {
33-
case "alpha":
34-
// 第一位进1
35-
betaVersion += parseInt(version.prerelease[1] || "0", 10) + 1 || 1;
36-
break;
37-
case "beta":
38-
// 第三位进1
39-
betaVersion += 100 * (parseInt(version.prerelease[1] || "0", 10) + 1 || 1);
40-
break;
41-
default:
42-
throw new Error("未知的版本类型");
43-
}
44-
manifest.version = `${version.major}.${version.minor}.${version.patch}.${betaVersion}`;
4532
manifest.name = `__MSG_scriptcat_beta__`;
4633
} else {
4734
manifest.name = `__MSG_scriptcat__`;
48-
manifest.version = packageInfo.version;
4935
}
5036

5137
// 处理manifest version

scripts/version.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import semver from "semver";
2+
3+
/**
4+
* 将 prerelease 版本号转换为 Chrome 兼容的纯数字格式
5+
* 例如: "1.4.0-beta" -> "1.4.0.1100", "1.4.0-alpha.1" -> "1.4.0.1002"
6+
* 非 prerelease 版本原样返回
7+
*/
8+
export function toChromeVersion(ver) {
9+
const parsed = semver.parse(ver);
10+
if (!parsed || !parsed.prerelease.length) {
11+
return ver;
12+
}
13+
let betaVersion = 1000;
14+
switch (parsed.prerelease[0]) {
15+
case "alpha":
16+
betaVersion += parseInt(parsed.prerelease[1] || "0", 10) + 1 || 1;
17+
break;
18+
case "beta":
19+
betaVersion += 100 * (parseInt(parsed.prerelease[1] || "0", 10) + 1 || 1);
20+
break;
21+
default:
22+
throw new Error("未知的版本类型");
23+
}
24+
return `${parsed.major}.${parsed.minor}.${parsed.patch}.${betaVersion}`;
25+
}

0 commit comments

Comments
 (0)