lighthouse ci 默认不拦截低分构建,因其设计哲学是“报告先行,约束后置”,autorun仅收集数据并生成报告,需显式配置assertions(如"categories:accessibility": ["error", {"minscore": 0.9}])才能使ci失败。

直接在 CI 流水线里跑 lhci autorun 就能自动检测性能和可访问性,但默认不报错、不卡点——必须手动配 assertions 规则,否则“绿构建”可能藏着 accessibility 得分 42 的页面。
为什么 lhci autorun 默认不拦截低分构建
Lighthouse CI 的设计哲学是“报告先行,约束后置”。autorun 默认只收集数据、上传到服务器、生成 URL 报告,但不会因分数低而让 CI 失败。这是为了防止早期接入时被大量历史问题阻塞发布流程。
- 所有断言(
assertions)必须显式声明,比如"categories:accessibility": ["error", {"minScore": 0.9}] - 不写
assert配置,哪怕accessibility得分为 0,CI 也照常通过 -
minScore是小数(0.9 表示 90 分),不是整数;写成90会静默忽略该规则 - 若同时监控多个 URL,任一 URL 不达标都会触发失败——除非用
multiple策略覆盖
lighthouserc.json 中必须写的三项配置
最小可行配置需覆盖采集、断言、服务器三块,缺一不可。漏掉 upload 或写错 target,会导致报告无法归档或断言失效。
-
collect.url:必须是可直连的地址,http://localhost:3000要确保服务已启动且响应 HTML(不是 404 或重定向) -
assert.assertions:至少声明"categories:performance"和"categories:accessibility",否则对应维度不校验 -
upload.target:推荐用"temporary-public-storage"(无需鉴权),避免本地lhci server部署复杂度;若用自建 server,url必须带协议(http://)且可被 CI 容器访问
CI 环境下 Lighthouse 常见失真原因
本地跑分 95,CI 里掉到 60,大概率不是代码问题,而是环境差异导致 DOM 渲染或资源加载异常。
- Node.js 版本不一致:
lhciv13+ 要求 Node ≥ 18,旧版 CI 镜像(如node:16)会静默降级为兼容模式,影响LCP等指标采集 - 没等页面“真正就绪”:React/Vue 应用常依赖 JS 渲染内容,
collect阶段需加--chrome-flags="--no-sandbox --disable-setuid-sandbox"并设置waitFor(如"waitFor": "document.querySelector('#app').offsetHeight > 0") - 网络模拟未关闭:CI 默认启用
throttling(模拟 4G),但若本地开发服无压缩、无缓存头,CI 下首屏资源加载会严重超时,导致FID/CLS异常——可在collect中设"throttling": "provided"关闭 - 扩展干扰:CI 容器中无浏览器扩展,但若本地测试时开了 uBlock Origin 或 Dark Reader,会污染 baseline,造成误判
如何让可访问性问题在 PR 阶段就暴露
单纯跑分不够,要让具体 HTML 问题出现在 PR 评论里,得靠 lhci upload + GitHub Status API 集成,而非仅靠 autorun。
- 用
lhci collect && lhci upload拆开执行,才能在upload后拿到buildUrl,再调 GitHub API 发 status - 关键字段不能硬编码:
GH_TOKEN需设为 GitHub App token(非个人 token),且权限含contents和statuses - 可访问性专项检查建议加
"a11y:color-contrast"和"a11y:label"级别断言,比总分更早定位硬伤 - PR 中最易被忽略的是动态生成内容:例如模态框内
<input>由 JS 插入,若未在waitFor中等待其出现,Lighthouse 就扫描不到对应label缺失问题
真正卡住上线的往往不是性能数字,而是某个 <img alt=""> 没加 role="presentation",或某处 for/id 因构建时哈希变化而错位——这些细节在 CI 里不会自动高亮,得靠断言规则和精准的 waitFor 行为兜底。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











