fix(mp-weixin): 将 import 语句改为 require
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
*
|
*
|
||||||
* 该脚本用于修复微信小程序的一些问题:
|
* 该脚本用于修复微信小程序的一些问题:
|
||||||
* 1. 将项目根目录下的 site.js 文件拷贝到 unpackage/dist/build/mp-weixin 目录下,如果文件存在则覆盖
|
* 1. 将项目根目录下的 site.js 文件拷贝到 unpackage/dist/build/mp-weixin 目录下,如果文件存在则覆盖
|
||||||
* 2. 将 `import site from "../site.js";` 这段代码追加到
|
* 2. 将 `const site = require("../site.js");` 这段代码追加到
|
||||||
* unpackage/dist/build/mp-weixin/common/vendor.js 文件内容开头部分,
|
* unpackage/dist/build/mp-weixin/common/vendor.js 文件内容开头部分,
|
||||||
* 如果这个文件开头已经有了这行代码,则不追加
|
* 如果这个文件开头已经有了这行代码,则不追加
|
||||||
*
|
*
|
||||||
@@ -68,32 +68,30 @@ async function commonPatch(mode = 'production') {
|
|||||||
await fsp.copyFile(srcSitePath, destSitePath);
|
await fsp.copyFile(srcSitePath, destSitePath);
|
||||||
console.log(`已拷贝: ${srcSitePath} -> ${destSitePath}`);
|
console.log(`已拷贝: ${srcSitePath} -> ${destSitePath}`);
|
||||||
|
|
||||||
// 2) 处理 vendor.js:在开头追加 import 语句(如果还没有的话)
|
// 2) 处理 vendor.js:在开头追加 require 语句(如果还没有的话)
|
||||||
const vendorExists = await exists(vendorPath);
|
const vendorExists = await exists(vendorPath);
|
||||||
if (!vendorExists) {
|
if (!vendorExists) {
|
||||||
console.warn(`目标 vendor.js 不存在,跳过追加 import。路径: ${vendorPath}`);
|
console.warn(`目标 vendor.js 不存在,跳过追加 require。路径: ${vendorPath}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let vendorContent = await fsp.readFile(vendorPath, 'utf8');
|
let vendorContent = await fsp.readFile(vendorPath, 'utf8');
|
||||||
|
|
||||||
const importLine = 'import site from "../site.js";';
|
const requireLine = 'const site = require("../site");';
|
||||||
// 检查文件开头(例如前 5 行或前 400 字符)是否已经包含该 import 语句
|
// 检查文件开头(例如前 5 行或前 400 字符)是否已经包含该 require 语句
|
||||||
const inspectPrefix = vendorContent.slice(0, 400);
|
const inspectPrefix = vendorContent.slice(0, 400);
|
||||||
const importRegex = new RegExp(
|
const requireRegex = new RegExp(
|
||||||
// 匹配可能存在的引号或分号差异,但我们只需要确切匹配这行文字
|
// 匹配可能存在的引号或分号差异
|
||||||
'^\\s*import\\s+site\\s+from\\s+[\'"]\\.\\./site\\.js[\'"];?',
|
'^\\s*const\\s+site\\s*=\\s*require\\s*\\([\'"]\\.\\./site[\'"]\\);?',
|
||||||
'm'
|
'm'
|
||||||
);
|
);
|
||||||
|
|
||||||
if (importRegex.test(inspectPrefix)) {
|
if (requireRegex.test(inspectPrefix)) {
|
||||||
console.log('vendor.js 开头已包含 import site 语句,跳过追加。');
|
console.log('vendor.js 开头已包含 require("../site") 语句,跳过追加。');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果文件以 shebang 或者注释开头,决定放在哪:通常我们把 import 放在文件最顶部(index 0)
|
// 把 requireLine + newline 插入文件最前面。
|
||||||
// 但如果文件以 "use strict"; 等指令开头,import 必须在所有非-import/非-comment 语句之前。
|
|
||||||
// 简单实现:如果文件开头有 UTF BOM,保留它;然后把 importLine + newline 插入文件最前面。
|
|
||||||
// 保留原始换行风格(若可能)
|
// 保留原始换行风格(若可能)
|
||||||
const eol = vendorContent.includes('\r\n') ? '\r\n' : '\n';
|
const eol = vendorContent.includes('\r\n') ? '\r\n' : '\n';
|
||||||
let prefix = '';
|
let prefix = '';
|
||||||
@@ -104,9 +102,9 @@ async function commonPatch(mode = 'production') {
|
|||||||
vendorContent = vendorContent.slice(1);
|
vendorContent = vendorContent.slice(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const newContent = prefix + importLine + eol + vendorContent;
|
const newContent = prefix + requireLine + eol + vendorContent;
|
||||||
await fsp.writeFile(vendorPath, newContent, 'utf8');
|
await fsp.writeFile(vendorPath, newContent, 'utf8');
|
||||||
console.log(`已在 vendor.js 开头追加: ${importLine}`);
|
console.log(`已在 vendor.js 开头追加: ${requireLine}`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('发生错误:', err);
|
console.error('发生错误:', err);
|
||||||
process.exitCode = 1;
|
process.exitCode = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user