@@ -2,13 +2,35 @@ import * as path from "path";
22import { rspack , NormalModule , type Configuration } from "@rspack/core" ;
33import { readFileSync } from "fs" ;
44import { v4 as uuidv4 } from "uuid" ;
5+ import semver from "semver" ;
56
67const pkg = JSON . parse ( readFileSync ( "./package.json" , "utf-8" ) ) ;
78
89const version = pkg . version ;
910const dirname = path . resolve ( ) ;
1011const isDev = process . env . NODE_ENV === "development" ;
1112const 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+ }
1234const 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