AppID:wx7ec46db1834dbd14 | 类型:企业 | 生成方式:纯 AI 生成 | 日期:2026-09-17
版本:v2(在 v1 静态体检基础上补跑运行时)| 检测岗:波波(方案/验收)
本轮新增证据:微信开发者工具真编译 + miniprogram-automator 运行时采集 + esbuild/postcss 全量语法门禁
在 v1 报告里我用的是源码静态口径,没有触发真编译。本轮用开发者工具 CLI 真编译后,连续命中 4 处编译阻断,任一处都会让预览/上传/提审直接失败:
| # | 文件 | 位置 | 性质 | 编译器报错 |
|---|---|---|---|---|
| 1 | pages/play-scene/play-scene.wxss | L91 末尾 | 属性值被截断,残留 over | 91:318: Unknown word |
| 2 | services/dsl-sources.ts | L50 | 箭头函数体后误加 as any | Expected ")" but found "as" |
| 3 | pages/wish-aggregate/wish-aggregate.wxml | offset 4228 | 多一个 </view> | 1:4649: unexpected end tag: view |
| 4 | pages/wish-list/wish-list.wxml | L18 | 裸 {{}} 属性(无属性名) | 18:47: unexpected character '{' |
全量门禁扫描结果(均为单点,非普遍性问题):
| 门禁 | 扫描范围 | 结果 |
|---|---|---|
| WXSS 语法(postcss) | 114 个 .wxss | 1 坏 / 113 好 |
| TS 语法(esbuild) | 125 个 .ts | 1 错 / 124 好(另 5 处 warning) |
| WXML 标签配对 | 110 个 .wxml | 1 坏 / 109 好 |
WXML 裸 {{}} 属性 | 110 个 .wxml | 1 坏 / 109 好 |
取证方法:4 处阻断修复后cli preview返回✔ preview(编译通过);取证完毕已全部还原,工作区git status miniprogram-v2为空、无任何业务代码改动。
建议补丁(属小冈域,我只诊断不开药方外动作):
play-scene.wxss:91 → overflow-y:auto;over} 改为 overflow-y:auto}(或补全为 overflow:hidden)dsl-sources.ts:50 → }).finally(() => { delete inflight[k]; } as any); 改为 }).finally((() => { delete inflight[k]; }) as any);(保留断言则需整体括号)wish-aggregate.wxml → 删除 </button></view></view><view id="wishDialog" 中多出的一个 </view>wish-list.wxml:18 → 删除裸属性 {{wishlist.length===0 ? "" : "hidden"}}(如需控制显隐,应写 hidden="{{wishlist.length > 0}}")采集方式:miniprogram-automator + wx.getPerformance(),11 个关键页面逐个 reLaunch 后取 firstRender 条目。
| 页面 | firstRender (ms) | 页面 data (B) | 状态 |
|---|---|---|---|
| pages/home/home | 343 | 2124 | ✅ |
| pages/selection/selection | 343 | 1271 | ✅ |
| pages/local/local | 59 | 1057 | ✅ |
| pages/profile/profile | 77 | 1260 | ✅ |
| pages/review/review | 77 | 98 | ✅ |
| pages/trip-detail/trip-detail | 77 | 1133 | ✅ |
| pages/payment-confirm/payment-confirm | 50 | 144 | ✅ |
| pages/order-detail/order-detail | 43 | 159 | ✅ |
| pages/messages/messages | 36 | 127 | ✅ |
| pages/coupons/coupons | 43 | 1614 | ✅ |
| pages/passport/passport | 43 | 1547 | ✅ |
data 普遍很小(最大 2124 B),说明业务数据未真实返回(未登录/后端不可达),因此这是渲染耗时,不是端到端首屏耗时。data 序列化体积:最大 2124 B(2.1 KB),远低于 256 KB 阈值setData 调用 955 处 / 93 页 ≈ 10.3 次每页;单次字面量超长(>400 字符)3 处,但均远小于 256 KB| 口径 | 体积 | 构成 |
|---|---|---|
| v1 源码口径 | 1966.4 KB(1.920 MB) | .wxss 772.9 / .ts 651.1 / .wxml 465.3 / .json 77.2 |
| v2 编译后估算 | 1883.3 KB(1.839 MB) | JS 775.3(TS→JS 未压缩)+ WXSS 615.8(minify)+ WXML 415.0(minify)+ JSON 77.2 |
估算方法(可复现):esbuild 编译 125 个 .ts → .js(--target=es2018,不压缩,对应 minified=false)+ esbuild --minify 压缩 114 个 .wxss + WXML 去空白。未计入框架运行时、项目配置文件、sourcemap。
🔴 配置放大器:project.config.json 中 minified = false(JS 不压缩)、uploadWithSourceMap = true。若把 minified 改为 true,JS 部分预计可压到 300 KB 量级,主包可回落至 约 1.4 MB。
subPackages=0 且主包 ≥1.8 MB)| 项 | v1 判定 | v2 修正 | 依据 |
|---|---|---|---|
| 接口断链 | 「足迹域 /footprints 断链」 | 更精确:journey.ts/status-timeline.ts 用的是正确的 /api/miniapp/user/footprints;仅 membership.ts 单点笔误少了 /user | 源码 grep 反证 |
| A2 关键路径 | 3⭐(主链路静态通、零运行时验证) | 1⭐(完全阻塞) | 真编译失败 = 预览/上传/提审全部不可达 |
| B1 / B4 | 未评估 | 4⭐ / 4⭐ | 运行时实测 |
| 维度 | 权重 | 维度分 | 公式 | 子项分布 |
|---|---|---|---|---|
| A 功能完整性 | 40% | 2.50 | (3+1+3+3)/4 | A1=3, A2=1, A3=3, A4=3 |
| B 性能基线 | 35% | 2.75 | (4+2+1+4)/4 | B1=4, B2=2🟠, B3=1🟠, B4=4 |
| C 合规安全 | 25% | 3.00 | (1+4+4)/3 | C1=1🔴, C2=N/A, C3=4, C4=4 |
加权总分 = 2.50×0.40 + 2.75×0.35 + 3.00×0.25 = 1.00 + 0.9625 + 0.75 = 2.7125 → 2.71
分数变化说明(不粉饰):v1 = 2.48 → v2 = 2.71,不是项目变好了。B 维从 1.50 升到 2.75 是因为原本 2 项「未评估」补测后拿到 4⭐/4⭐(分母从 2 变 4);同时 A 维因发现编译阻断,A2 从 3⭐ 降到 1⭐,A 从 3.00 降到 2.50。
__usePrivacyCheck__ + requirePrivacyAuthorize/onNeedPrivacyAuthorization 弹窗 + 后台隐私保护指引版本key-tasks/*(6 处)、membership.ts 的 /footprints(1 处)subPackagesminified 改 true 是最快手段(1 个配置项,预计主包 → 约 1.4 MB)(0 项)
unhandledrejection 兜底 + toast 覆盖|3. A4 订阅消息 + 分享|4. B1/B4 在真实后端数据下复测| 日 | 上午 | 下午 | 输出 |
|---|---|---|---|
| D1 | 修 4 处编译阻断(1h)→ cli preview 复验 | C1 隐私三件套(4h)+ 7 处断链改路径(1h) | 可预览可上传;红线解除 |
| D2 | minified=true + 拆分包(B3) | B2 复测真包体积(代码依赖分析) | B: 2.75 → 4.00+ |
| D3 | 真机全链路 + 后端数据到位后复测 B1/B4 | A3 兜底 + A4 订阅消息 | A: 2.50 → 4.25 |
修复后预估:A=(5+4+4+4)/4=4.25|B=(5+4+5+5)/4=4.75|C=(5+5+5)/3=5.00
→ 加权 = 1.70 + 1.6625 + 1.25 = 4.61 → 🟢 可上
A=(3+1+3+3)/4=2.50 ✅|B=(4+2+1+4)/4=2.75 ✅|C=(1+4+4)/3=3.00(C2 N/A 剔除)✅
加权 = 1.00+0.9625+0.75 = 2.7125 → 2.71 ✅
# 1) 真编译(会暴露全部编译阻断)
/Applications/wechatwebdevtools.app/Contents/MacOS/cli open --project miniprogram-v2
/Applications/wechatwebdevtools.app/Contents/MacOS/cli preview --project miniprogram-v2
# 2) 运行时采集(需先起自动化端口)
cli auto --project miniprogram-v2 --auto-port 9420 &
NODE_PATH=/Users/lean/node_modules node scripts/check_v2_runtime_automation.js
# 3) 语法门禁(只读,可随时跑)
python3 scripts/check_v2_launch_readiness.py
NODE_PATH=/Users/lean/node_modules node scripts/check_v2_wxss_syntax.js
python3 scripts/check_v2_wxml_syntax.py
python3 scripts/check_v2_wxml_bare_attr.py
firstRender),非端到端首屏;业务数据未真实返回,需在后端连通后复测。