HTML代码CI/CD中必须校验,html-validate守语义、HTMLHint守风格、HTMLProofer守链接,三者分层防御缺一不可;否则结构缺陷、可访问性漏洞和语义错误将直接上线。

HTML代码在CI/CD中不校验,等于把结构缺陷、可访问性漏洞和语义错误直接放行到预发或生产环境——这不是“先上线再修复”,而是主动埋雷。
用 html-validate 替代浏览器手动验证
浏览器开发者工具里的“Elements”面板只看渲染结果,不校验规范;W3C Validator网站操作繁琐、无法集成、不支持自定义规则。html-validate 是命令行优先、CI友好的现代替代方案。
- 它基于标准 HTML5 解析器,能识别
<picture>嵌套<source>的合法性,也能报出<img>缺少alt的 warning - 支持
--config指向 JSON 或 JS 配置文件,比如禁用对data-属性的警告(团队内部约定合法) - 输出支持
--format json,方便后续脚本提取 error 数量、定位文件行号,用于门禁拦截 - 注意:默认不检查外部资源(如远程
src的 JS),需显式启用no-unknown-attributes等插件规则才覆盖自定义 Web Component 属性
HTMLHint 在 GitHub Actions 中失败却静默通过
常见现象是 npx htmlhint src/*.html 本地报错,但 CI 流水线里 exit code 为 0,检查被跳过。根本原因是 HTMLHint 默认不因警告(warning)而退出,只对 error 严格。
- 必须加
--fail-on-warn参数才能让 warning 触发非零退出码,否则 PR 检查形同虚设 - 配置文件中若启用
"attr-lowercase": true,但模板里混用CLASS和class,HTMLHint 会报 warning 而非 error —— 这类规则必须配合--fail-on-warn - 路径通配符在 CI 中容易失效:
src/**/*.html在某些 runner 上需改写为find src -name "*.html"再传给htmlhint,否则漏检子目录
HTMLProofer 专治链接与资源存活问题
html-validate 和 HTMLHint 都不验证 href 是否 404、src 图片是否返回 200。这类运行时依赖问题,必须用 HTMLProofer。
立即学习“前端免费学习笔记(深入)”;
- 它本质是 HTTP 客户端 + HTML 解析器组合,会真实发起请求,所以 CI 中需配置
--url-ignore排除测试域名、localhost 或第三方 CDN(避免超时拖慢流水线) - 对相对路径链接(如
./docs/install.md)默认不检查,需加--check-html开启 HTML 结构校验,否则<a href="missing.html">会被放过 - 注意并发数:
--max-connections 5是安全值;设太高可能触发目标站反爬,设太低则耗时翻倍 - 它不处理内联 SVG 或
<script>里的字符串拼接 URL,这类逻辑层链接需靠单元测试覆盖
三者不是二选一,而是分层防御:html-validate 守语义,HTMLHint 守风格,HTMLProofer 守链接。漏掉任何一层,都可能让一个 <button> 缺少 type="button" 导致表单意外提交,或让一个文档链接在发布后立刻 404 —— 这些问题不会出现在 diff 里,也不会被测试用例捕获,只能靠校验工具卡在合并前。



















