先跑,再说。
命令就一行,换成你自己的项目路径:
node "<skill-base>/scripts/preflight.js" --path <你的小程序项目根>这个技能是纯静态扫描,不改文件、不联网,也不读密钥里的内容,拿它验货没心理负担。我对自己正在做的三个微信小程序各跑了一遍,三份原样输出存成文本文件,过程中没动任何一个项目文件。项目一律用 A / B / C 代称,都是本机真实项目;输出里的密钥文件名做了脱敏,环境 ID、AppID、密钥值一律不公开。
三份输出的末尾都长这样:
阻断 0 | 警告 4 | 提示 3
没有阻断项,但警告项要人确认。合起来:三份都是零阻断,报出警告 6 次、给出提示 10 次。
看到「零阻断」,我第一反应是这文章没法写了——没揪出什么惊天漏洞,硬写就成了广告。第二反应更糟:A 项目我印象里是「云环境 ID 留空、只能离线演示」,可整份输出里一条 envId 告警都没有。标题当时都拟好了,叫「工具漏检」。
回配置文件一看,envId 早填上了,app.js 里还用 demo: !config.envId 决定走不走演示模式。是我脑子里那条旧备注过期,脚本没错。这句话我划掉了。
既然差点冤枉它一回,剩下的告警就不敢照着清单抄结论了,一条条翻回源码。
C 项目报 app.json 里还有 permission 段。原文是 "permission": {},旁边写着 "requiredPrivateInfos": []。空对象在 JS 里是真值,静态判断自然会命中。可一个空段会不会真让新版开发者工具报「无效的 app.json permission」,我没在工具里实测,不知道。能确定的只有:别把它当「配置写错了」顺手改掉。
B 项目报「失败时静默返回空值」。翻到那个文件,几处 catch 各有各的缘由:一处注释原话是「异常时序下 getApp() 可能是 undefined,兜住,别白屏」,返回空是刻意的;另两处 catch 里其实已经用 console.warn 打了原始错误;只有一处真写了 /* 忽略 */。脚本给的改法是「把失败和人看的空状态区分开」,方向对。可要是不看上下文一律改成抛错,先崩的就是那个防白屏的兜底。
还有只在单个项目出现的:本地有明文密钥文件、已被 gitignore 覆盖;以及一处「没在配置里找到 envId」的提示。这几条我没往下深挖,摆出来而已。
顺手读了脚本里 envId 的检查逻辑,倒真看见一个边界:只查三个固定路径,而且只在找到配置文件时才查;三个路径都不存在时这一段整个跳过,一声不吭。所以「没有 envId 告警」推不出「envId 配好了」。项目压根不走云开发时跳过是合理的,不算 bug。但话说回来:静态体检报零阻断,只说明在这套规则的覆盖范围里没命中,不等于可以上线。
这回能留下的东西不多:一行谁拿自己项目都能重跑的命令,三份没加工的输出,一份翻源码的摘录(项目名和配置值都抹了),还有一条被划掉的结论。没修任何代码,没跑真机,隐私指引和备案也没验,样本就我自己的三个项目,别往外推。
省下的是挨个翻配置文件的时间,没省掉的是判断那一步。本来想拿「工具负责不漏,人负责不冤枉」收尾,写完自己看着像标语,也划了。
想自己跑一遍,从「小程序自动化助手」开始:技能直达链接
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。