日期:2026-09-29 分支:bobo/v3-c-takeover 修复提交:0b8ebc1b 责任人:波波
在地页顶部「图片手风琴」六片空白、其下图片整块不显示,控制台无任何报错,
页面其余部分(五维宫格、周边寺庙)正常。
上一笔 880953c9(「拾起碎片」改造为「周边寺庙」)在重写 onLoad 时,
删掉了两个 const 定义,却保留了 setData 里的引用:
// 被删掉的两行
const panorama = 'https://img.kailashi.cn/assets/miniapp-static/v1/local-panorama.jpg'
const accordion = SLICE_TITLES
// 引用还在 → 运行时 ReferenceError
this.setData({ accordion, panorama, ... })
三层放大,缺一层都不会这么难查:
esbuild 只做语法解析,不查未定义变量,编译一路绿灯。.catch(() => this.setData({ loading: false })) 吞掉, 页面只是 loading 转 false,看不出失败。
实际代码根本没跑到渲染。
local.ts:180-181)。```ts
}).catch((e: any) => {
console.error('[local] 在地页数据加载失败', e)
this.setData({ loading: false })
})
```
scripts/check_ts_undefined.py,堵住第 1 层。python3 scripts/check_ts_undefined.py # 正常检查
python3 scripts/check_ts_undefined.py --self-test # 反证(注入假未定义变量)
tsc -p tsconfig.json项目 tsconfig.json 写死 types: ["miniprogram-api-typings"],该包未安装。
tsc 会先抛 TS2688: Cannot find type definition file 并中止整个编译,
一个文件都不检查 —— 命令行却表现为"0 错误"的假绿。这是本次差点被骗过去的第二个坑。
脚本自带一份 types: [] 的临时配置(.tsconfig.undefcheck.json,用完即删)绕开它。
types: [] 意味着小程序宿主全局符号全部缺失,产生固定噪音。实测全仓 277 条报错
100% 是宿主符号,真问题 0 条:
| 符号 | 条数 | 类型 |
|---|---|---|
wx | 162 | TS2304 |
WechatMiniprogram | 42 | TS2503 |
Component | 34 | TS2304 |
Page | 27 | TS2304 |
getCurrentPages | 10 | TS2304 |
App / getApp | 各 1 | TS2304 |
白名单写死在脚本里(HOST_GLOBALS / HOST_NAMESPACES),
出现白名单外的新名字一律视为真问题,人工确认后再决定是否补进白名单。
| 反证 | 结果 |
|---|---|
注入 ghostVariableThatDoesNotExist | 抓到 TS2304 ✓ |
把 panorama 定义删回原样 | 抓到 local.ts(181,33) TS18004 ✓ |
| 还原后复跑 | PASS,0 真问题 ✓ |
const a = 不存在的变量 它不管。前端仓的语法门禁必须补一层 tsc,否则这类断链式改动永远抓不到。
.catch(() => {}) 在降级兜底上合理,但用在 页面主数据加载上等于自断线索。全仓扫出 21 处 .catch(() => {}) 完全空体,
其中内容加载类的(hero-section / key-route / key-experience / today-card /
asset-grid 等)建议后续统一加一行 console.error,本次只改了在地页这一处。
得看"删的东西还有没有人用" —— 这正是 tsc 能自动兜住的地方。
local.ts 已还原,全景图 https://img.kailashi.cn/.../local-panorama.jpg HTTP 200。0b8ebc1b;推送仍阻塞(远端 pre-receive 拒 6544a496 的小冈署名提交,待推送队列 27 笔 = 波波 19 + 小冈 8,方案待用户拍板)。