//! post-build 修复脚本:处理微信小程序构建产物的兼容性问题 //! //! 背景:marked v18+ 含 lookbehind 检测 `new RegExp("(?<=1)(?{try{return!!new RegExp("(?<=1)(?\{try\{return!!new RegExp\("\(\?<=1\)\(\?`+)[^`]+\k` 匹配代码围栏。 // 转为编号捕获组 `(`+)\1`(ES5 兼容,无命名捕获组,行为等价)。 // 通用: (?...) → (...), \k → \N(按捕获组序编号,这里只有 a/b 两组) src = src.replace(/\(\?\`\+\)\[^\`\]\+\\k/g, '(`+)\\1') src = src.replace(/\(\?\`\+\)\[^\`\]\+\\k/g, '(`+)\\1') // 兜底:任何残留命名捕获组 (? 或 \k 转为无命名 src = src.replace(/\(\?<[a-z][a-z0-9_]*>/g, '(') src = src.replace(/\\k<[a-z]>/g, '\\1') if (src !== before) { fs.writeFileSync(VENDOR, src) console.log('[fix-mp-build] vendor.js lookbehind 已全部替换(检测+条件分支)') } else { console.warn('[fix-mp-build] 未找到 lookbehind(可能已处理或格式不同)') } } // 清理手动补的 @swc/helpers(不再需要,避免污染) function cleanupSwcHelpers() { const swcDir = path.join(BUILD_DIR, 'common', '@swc', 'helpers') if (fs.existsSync(swcDir)) { fs.rmSync(swcDir, { recursive: true, force: true }) console.log('[fix-mp-build] 已清理手动补的 @swc/helpers') } } fixLookbehind() cleanupSwcHelpers()