From 2342a14f2e98c47702c222cfb0f55ffa829517d5 Mon Sep 17 00:00:00 2001 From: ZF sun <34314687@qq.com> Date: Thu, 7 May 2026 17:36:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(mp-weixin):=20=E5=B0=86=20import=20?= =?UTF-8?q?=E8=AF=AD=E5=8F=A5=E6=94=B9=E4=B8=BA=20require?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/mp-weixin.patch.js | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/scripts/mp-weixin.patch.js b/scripts/mp-weixin.patch.js index c877624..32d23ea 100644 --- a/scripts/mp-weixin.patch.js +++ b/scripts/mp-weixin.patch.js @@ -4,7 +4,7 @@ * * 该脚本用于修复微信小程序的一些问题: * 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 文件内容开头部分, * 如果这个文件开头已经有了这行代码,则不追加 * @@ -68,32 +68,30 @@ async function commonPatch(mode = 'production') { await fsp.copyFile(srcSitePath, destSitePath); console.log(`已拷贝: ${srcSitePath} -> ${destSitePath}`); - // 2) 处理 vendor.js:在开头追加 import 语句(如果还没有的话) + // 2) 处理 vendor.js:在开头追加 require 语句(如果还没有的话) const vendorExists = await exists(vendorPath); if (!vendorExists) { - console.warn(`目标 vendor.js 不存在,跳过追加 import。路径: ${vendorPath}`); + console.warn(`目标 vendor.js 不存在,跳过追加 require。路径: ${vendorPath}`); return; } let vendorContent = await fsp.readFile(vendorPath, 'utf8'); - const importLine = 'import site from "../site.js";'; - // 检查文件开头(例如前 5 行或前 400 字符)是否已经包含该 import 语句 + const requireLine = 'const site = require("../site");'; + // 检查文件开头(例如前 5 行或前 400 字符)是否已经包含该 require 语句 const inspectPrefix = vendorContent.slice(0, 400); - const importRegex = new RegExp( - // 匹配可能存在的引号或分号差异,但我们只需要确切匹配这行文字 - '^\\s*import\\s+site\\s+from\\s+[\'"]\\.\\./site\\.js[\'"];?', + const requireRegex = new RegExp( + // 匹配可能存在的引号或分号差异 + '^\\s*const\\s+site\\s*=\\s*require\\s*\\([\'"]\\.\\./site[\'"]\\);?', 'm' ); - if (importRegex.test(inspectPrefix)) { - console.log('vendor.js 开头已包含 import site 语句,跳过追加。'); + if (requireRegex.test(inspectPrefix)) { + console.log('vendor.js 开头已包含 require("../site") 语句,跳过追加。'); return; } - // 如果文件以 shebang 或者注释开头,决定放在哪:通常我们把 import 放在文件最顶部(index 0) - // 但如果文件以 "use strict"; 等指令开头,import 必须在所有非-import/非-comment 语句之前。 - // 简单实现:如果文件开头有 UTF BOM,保留它;然后把 importLine + newline 插入文件最前面。 + // 把 requireLine + newline 插入文件最前面。 // 保留原始换行风格(若可能) const eol = vendorContent.includes('\r\n') ? '\r\n' : '\n'; let prefix = ''; @@ -104,9 +102,9 @@ async function commonPatch(mode = 'production') { vendorContent = vendorContent.slice(1); } - const newContent = prefix + importLine + eol + vendorContent; + const newContent = prefix + requireLine + eol + vendorContent; await fsp.writeFile(vendorPath, newContent, 'utf8'); - console.log(`已在 vendor.js 开头追加: ${importLine}`); + console.log(`已在 vendor.js 开头追加: ${requireLine}`); } catch (err) { console.error('发生错误:', err); process.exitCode = 1;