fix(scripts): vendor.js注入改为先清理旧行再注入,确保幂等

This commit is contained in:
2026-05-09 17:21:02 +08:00
parent 25fc0a59a8
commit 504e5322fb

View File

@@ -102,22 +102,22 @@ async function commonPatch(mode = 'production') {
let vendorContent = await fsp.readFile(vendorPath, 'utf8');
const requireLine = 'const site = require("../site");';
const versionLine = 'const __app_version = require("../version");';
// 检查文件开头(例如前 1000 字符)是否已经包含这些 require 语句
const inspectPrefix = vendorContent.slice(0, 1000);
const hasSiteRequire = new RegExp(
'^\\s*const\\s+site\\s*=\\s*require\\s*\\([\'"]\\.\\./site[\'"]\\);?',
'm'
).test(inspectPrefix);
const hasVersionRequire = new RegExp(
'^\\s*const\\s+__app_version\\s*=\\s*require\\s*\\([\'"]\\.\\./version[\'"]\\);?',
'm'
).test(inspectPrefix);
const requireLines = [
'const site = require("../site");',
'const __app_version = require("../version");'
];
if (hasSiteRequire && hasVersionRequire) {
console.log('vendor.js 开头已包含 require 语句,跳过追加。');
return;
// 清理已有的重复注入(兼容新旧格式:../version.json 和 ../version)
let cleaned = false;
const injectPatterns = [
/^\s*const\s+site\s*=\s*require\s*\(['"]\.\.\/site(\.js)?['"]\);?\s*\r?\n/gm,
/^\s*const\s+__app_version\s*=\s*require\s*\(['"]\.\.\/version(\.json)?['"]\);?\s*\r?\n/gm,
];
for (const pattern of injectPatterns) {
if (pattern.test(vendorContent)) {
vendorContent = vendorContent.replace(pattern, '');
cleaned = true;
}
}
// 把 require 语句 + newline 插入文件最前面。
@@ -131,13 +131,9 @@ async function commonPatch(mode = 'production') {
vendorContent = vendorContent.slice(1);
}
const linesToInject = [requireLine];
if (!hasVersionRequire) {
linesToInject.push(versionLine);
}
const newContent = prefix + linesToInject.join(eol) + eol + vendorContent;
const newContent = prefix + requireLines.join(eol) + eol + vendorContent;
await fsp.writeFile(vendorPath, newContent, 'utf8');
console.log(`已在 vendor.js 开头追加: ${linesToInject.join(', ')}`);
console.log(cleaned ? `已清理旧注入并重新注入: ${requireLines.join(', ')}` : `已在 vendor.js 开头追加: ${requireLines.join(', ')}`);
} catch (err) {
console.error('发生错误:', err);
process.exitCode = 1;