Skip to content

Commit 7b81b8c

Browse files
committed
fix: 构建时将 prerelease 版本号转换为 Chrome 兼容格式
rspack build 阶段未转换 manifest.json 中的版本号,导致 "1.4.0-beta" 等非法版本使扩展无法加载,E2E 测试全部失败。 复用 pack.js 中的转换逻辑,在 CopyRspackPlugin transform 中将版本号转为纯数字格式(如 1.4.0.1100)。
1 parent 847b776 commit 7b81b8c

1 file changed

Lines changed: 23 additions & 0 deletions

File tree

rspack.config.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,35 @@ 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";
56

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

89
const version = pkg.version;
910
const dirname = path.resolve();
1011
const isDev = process.env.NODE_ENV === "development";
1112
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+
}
1234
const isReactTools = process.env.REACT_DEVTOOLS === "true";
1335

1436
// Target browsers, see: https://github.com/browserslist/browserslist
@@ -137,6 +159,7 @@ export default {
137159
// 将manifest.json内版本号替换为package.json中版本号
138160
transform(content: Buffer) {
139161
const manifest = JSON.parse(content.toString()) as chrome.runtime.ManifestV3;
162+
manifest.version = toChromeVersion(version);
140163
if (isDev || isBeta) {
141164
manifest.name = "__MSG_scriptcat_beta__";
142165
}

0 commit comments

Comments
 (0)