小程序上线前体检报告 v2(运行时补测 · 含编译阻断)

AppID:wx7ec46db1834dbd14 | 类型:企业 | 生成方式:纯 AI 生成 | 日期:2026-09-17

版本:v2(在 v1 静态体检基础上补跑运行时)| 检测岗:波波(方案/验收)

本轮新增证据:微信开发者工具真编译 + miniprogram-automator 运行时采集 + esbuild/postcss 全量语法门禁


0. 本轮最重要发现:🔴 项目当前状态下编译不过

在 v1 报告里我用的是源码静态口径,没有触发真编译。本轮用开发者工具 CLI 真编译后,连续命中 4 处编译阻断,任一处都会让预览/上传/提审直接失败:

#文件位置性质编译器报错
1pages/play-scene/play-scene.wxssL91 末尾属性值被截断,残留 over91:318: Unknown word
2services/dsl-sources.tsL50箭头函数体后误加 as anyExpected ")" but found "as"
3pages/wish-aggregate/wish-aggregate.wxmloffset 4228多一个 </view>1:4649: unexpected end tag: view
4pages/wish-list/wish-list.wxmlL18裸 {{}} 属性(无属性名)18:47: unexpected character '{'

全量门禁扫描结果(均为单点,非普遍性问题):

门禁扫描范围结果
WXSS 语法(postcss)114 个 .wxss1 坏 / 113 好
TS 语法(esbuild)125 个 .ts1 错 / 124 好(另 5 处 warning)
WXML 标签配对110 个 .wxml1 坏 / 109 好
WXML 裸 {{}} 属性110 个 .wxml1 坏 / 109 好
取证方法:4 处阻断修复后 cli preview 返回 ✔ preview(编译通过);取证完毕已全部还原,工作区 git status miniprogram-v2 为空、无任何业务代码改动。

建议补丁(属小冈域,我只诊断不开药方外动作):

  1. play-scene.wxss:91 → overflow-y:auto;over} 改为 overflow-y:auto}(或补全为 overflow:hidden)
  2. dsl-sources.ts:50 → }).finally(() => { delete inflight[k]; } as any); 改为 }).finally((() => { delete inflight[k]; }) as any);(保留断言则需整体括号)
  3. wish-aggregate.wxml → 删除 </button></view></view><view id="wishDialog" 中多出的一个 </view>
  4. wish-list.wxml:18 → 删除裸属性 {{wishlist.length===0 ? "" : "hidden"}}(如需控制显隐,应写 hidden="{{wishlist.length > 0}}")

1. B1 首屏耗时(v1 未评估 → 本轮实测)

采集方式:miniprogram-automator + wx.getPerformance(),11 个关键页面逐个 reLaunch 后取 firstRender 条目。

页面firstRender (ms)页面 data (B)状态
pages/home/home3432124✅
pages/selection/selection3431271✅
pages/local/local591057✅
pages/profile/profile771260✅
pages/review/review7798✅
pages/trip-detail/trip-detail771133✅
pages/payment-confirm/payment-confirm50144✅
pages/order-detail/order-detail43159✅
pages/messages/messages36127✅
pages/coupons/coupons431614✅
pages/passport/passport431547✅

2. B4 setData(v1 未评估 → 本轮实测 + 静态)

3. B2/B3 真包体积(v1 源码口径 → 本轮编译后估算)

口径体积构成
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。

4. 对 v1 判定的修正

项v1 判定v2 修正依据
接口断链「足迹域 /footprints 断链」更精确:journey.ts/status-timeline.ts 用的是正确的 /api/miniapp/user/footprints;仅 membership.ts 单点笔误少了 /user源码 grep 反证
A2 关键路径3⭐(主链路静态通、零运行时验证)1⭐(完全阻塞)真编译失败 = 预览/上传/提审全部不可达
B1 / B4未评估4⭐ / 4⭐运行时实测

5. 重算评分

维度权重维度分公式子项分布
A 功能完整性40%2.50(3+1+3+3)/4A1=3, A2=1, A3=3, A4=3
B 性能基线35%2.75(4+2+1+4)/4B1=4, B2=2🟠, B3=1🟠, B4=4
C 合规安全25%3.00(1+4+4)/3C1=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。

问题档分布

6. ⛔ P 分级(更新)

P0(必修,不修无法提审)

  1. 4 处编译阻断(工程补充项,不占星值但优先级最高)—— 修完才能预览/上传
  2. C1 隐私协议三件套:__usePrivacyCheck__ + requirePrivacyAuthorize/onNeedPrivacyAuthorization 弹窗 + 后台隐私保护指引版本
  3. 7 处接口断链:key-tasks/*(6 处)、membership.ts 的 /footprints(1 处)

P1(建议修)

  1. A2 关键路径:P0-1 修完即自动解除
  2. B3 拆分包:tabBar 四域 + 工作台 + 评价域切 subPackages
  3. B2 压主包:minified 改 true 是最快手段(1 个配置项,预计主包 → 约 1.4 MB)

P1.5

(0 项)

P2(可后续)

  1. A1 补路径(同 P0-3)|2. A3 全局 unhandledrejection 兜底 + toast 覆盖|3. A4 订阅消息 + 分享|4. B1/B4 在真实后端数据下复测

7. 3 天 SOP(更新)

日上午下午输出
D1修 4 处编译阻断(1h)→ cli preview 复验C1 隐私三件套(4h)+ 7 处断链改路径(1h)可预览可上传;红线解除
D2minified=true + 拆分包(B3)B2 复测真包体积(代码依赖分析)B: 2.75 → 4.00+
D3真机全链路 + 后端数据到位后复测 B1/B4A3 兜底 + 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 → 🟢 可上

8. 数字自洽性校验

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 ✅

9. 复现命令

# 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

10. 口径边界(必读)