html静态扫描工具应选html-validate或axe-core,前者支持json schema精细配置规则(如仅校验alt、href),后者适合e2e集成;需在ci中独立设html-lint job,用npx html-validate --config .htmlvalidate.json --max-warnings 0 --format json扫描指定路径,并按业务场景通过extends或ignore字段动态裁剪规则。

HTML 代码质量没法靠肉眼盯,必须进 CI 流水线自动跑测;否则 PR 合并前没人真去检查 <img> 缺不缺 alt、<a></a> 链接有没有 href、aria-* 属性拼错没——这些细节漏掉一个,就可能触发 WCAG 失败或 SEO 折损。
怎么选 HTML 静态扫描工具?重点看可配置性和规则粒度
别直接用 html-validate 或 axe-core 的默认配置跑,它们开箱即用但太宽泛。真实项目需要按团队标准裁剪规则集:
-
html-validate支持 JSON Schema 配置,能禁用attr-duplication这类低优先级警告,只保留attr-req-alt、attr-req-href等硬性校验项 -
axe-core更适合集成进 E2E 测试(比如 Cypress),但它对静态 HTML 文件支持弱,不能直接扫描index.html原文件 - 如果项目已用 ESLint,可加装
eslint-plugin-html,把 HTML 片段当 JS 字符串处理——适合 Vue/React 中的内联模板,但无法覆盖纯 HTML 页面
如何让 HTML 扫描进 CI 而不是只在本地跑?
关键不是“能不能跑”,而是“跑在哪”和“失败时是否阻断”。GitHub Actions 中常见错误是把扫描命令放在 build 步骤后,结果构建失败了扫描根本没执行:
- 必须单独设一个
html-lintjob,依赖checkout,不依赖build - 命令用
npx html-validate --config .htmlvalidate.json src/**/*.html,注意路径要匹配实际 HTML 存放位置(如public/或src/templates/) - 加
--max-warnings 0参数,否则默认允许警告通过,等于没校验 - 输出格式用
--format json,方便后续解析或上传到质量平台
为什么扫描总报“document-title-missing”却不想改?
不是所有 HTML 都需要 <title></title> —— 比如微前端子应用的入口 HTML、iframe 嵌入页、或服务端渲染的片段模板。硬塞标题反而破坏语义:
- 在
.htmlvalidate.json中用extends继承基础规则,再用rules覆盖特定项:"document-title-missing": "off" - 更稳妥的做法是用
ignore字段按 glob 忽略路径:"ignore": ["src/micro-fe/*.html"] - 千万别用注释关闭规则(如
<!-- html-validate-disable document-title-missing -->),CI 不认这种行内指令
真正难的不是加工具,而是定义哪些 HTML 规则算“必须失败”。比如 attr-req-lang 在多语言站点是刚需,在单语言内部管理页就是干扰项——规则配置得跟着业务场景走,而不是照搬 WCAG 全量清单。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











