微信小程序页面迁移校验之前 P5任务处理之前
This commit is contained in:
59
scripts/ops/patch_automator_spawn.js
Normal file
59
scripts/ops/patch_automator_spawn.js
Normal file
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* 修补 miniprogram-automator 的 spawn 调用
|
||||
* 问题:在 Windows 上 spawn .bat 文件需要 shell: true
|
||||
* miniprogram-automator v0.12.1 的 Launcher.js 中 spawn 缺少此选项
|
||||
*
|
||||
* 用法:在 weixin-devtools-mcp 启动前运行此补丁
|
||||
* node scripts/ops/patch_automator_spawn.js
|
||||
*/
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// npx 缓存目录
|
||||
const npxCacheBase = path.join(process.env.LOCALAPPDATA, 'npm-cache', '_npx');
|
||||
|
||||
// 遍历 npx 缓存找到 miniprogram-automator
|
||||
const dirs = fs.readdirSync(npxCacheBase);
|
||||
let patched = 0;
|
||||
|
||||
for (const dir of dirs) {
|
||||
const launcherPath = path.join(npxCacheBase, dir, 'node_modules', 'miniprogram-automator', 'out', 'Launcher.js');
|
||||
|
||||
if (!fs.existsSync(launcherPath)) continue;
|
||||
|
||||
let content = fs.readFileSync(launcherPath, 'utf8');
|
||||
|
||||
// 检查是否已经 patch 过
|
||||
if (content.includes('shell:!0') || content.includes('shell: true')) {
|
||||
console.log(`[SKIP] ${dir} - 已经 patch 过`);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 找到 spawn 调用并添加 shell: true
|
||||
// 原始代码(混淆后): child_process_1.default.spawn(e,n,_)
|
||||
// 其中 _ = {stdio:"ignore"} 或 _ = {stdio:"ignore",cwd:o}
|
||||
// 需要在 _ 对象中添加 shell: true
|
||||
|
||||
// 方案:替换 spawn options 构造处
|
||||
// 原始: const _={stdio:"ignore"};
|
||||
// 替换: const _={stdio:"ignore",shell:true};
|
||||
const original = 'const _={stdio:"ignore"};';
|
||||
const replacement = 'const _={stdio:"ignore",shell:!0};';
|
||||
|
||||
if (content.includes(original)) {
|
||||
content = content.replace(original, replacement);
|
||||
fs.writeFileSync(launcherPath, content, 'utf8');
|
||||
console.log(`[PATCHED] ${dir}/Launcher.js - 添加 shell:true`);
|
||||
patched++;
|
||||
} else {
|
||||
console.log(`[WARN] ${dir} - 未找到预期的 spawn options 模式`);
|
||||
// 尝试显示 spawn 附近的代码
|
||||
const spawnIdx = content.indexOf('child_process_1.default.spawn');
|
||||
if (spawnIdx > -1) {
|
||||
const context = content.substring(Math.max(0, spawnIdx - 100), spawnIdx + 100);
|
||||
console.log(` spawn 上下文: ...${context}...`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\n完成: ${patched} 个文件已 patch`);
|
||||
Reference in New Issue
Block a user