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');
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user