fix(scripts): vendor.js注入改为先清理旧行再注入,确保幂等
This commit is contained in:
@@ -102,22 +102,22 @@ async function commonPatch(mode = 'production') {
|
|||||||
|
|
||||||
let vendorContent = await fsp.readFile(vendorPath, 'utf8');
|
let vendorContent = await fsp.readFile(vendorPath, 'utf8');
|
||||||
|
|
||||||
const requireLine = 'const site = require("../site");';
|
const requireLines = [
|
||||||
const versionLine = 'const __app_version = require("../version");';
|
'const site = require("../site");',
|
||||||
// 检查文件开头(例如前 1000 字符)是否已经包含这些 require 语句
|
'const __app_version = require("../version");'
|
||||||
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);
|
|
||||||
|
|
||||||
if (hasSiteRequire && hasVersionRequire) {
|
// 清理已有的重复注入(兼容新旧格式:../version.json 和 ../version)
|
||||||
console.log('vendor.js 开头已包含 require 语句,跳过追加。');
|
let cleaned = false;
|
||||||
return;
|
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 插入文件最前面。
|
// 把 require 语句 + newline 插入文件最前面。
|
||||||
@@ -131,13 +131,9 @@ async function commonPatch(mode = 'production') {
|
|||||||
vendorContent = vendorContent.slice(1);
|
vendorContent = vendorContent.slice(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const linesToInject = [requireLine];
|
const newContent = prefix + requireLines.join(eol) + eol + vendorContent;
|
||||||
if (!hasVersionRequire) {
|
|
||||||
linesToInject.push(versionLine);
|
|
||||||
}
|
|
||||||
const newContent = prefix + linesToInject.join(eol) + eol + vendorContent;
|
|
||||||
await fsp.writeFile(vendorPath, newContent, 'utf8');
|
await fsp.writeFile(vendorPath, newContent, 'utf8');
|
||||||
console.log(`已在 vendor.js 开头追加: ${linesToInject.join(', ')}`);
|
console.log(cleaned ? `已清理旧注入并重新注入: ${requireLines.join(', ')}` : `已在 vendor.js 开头追加: ${requireLines.join(', ')}`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('发生错误:', err);
|
console.error('发生错误:', err);
|
||||||
process.exitCode = 1;
|
process.exitCode = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user