html-validate是最可行的无侵入方案,因其不修改构建流程、不限制模板引擎、无需重构html,仅静态扫描并报告问题,支持ci集成、增量校验与灵活配置,兼顾可访问性与长期维护性。

为什么 html-validate 是当前最可行的无侵入方案
它不改你的构建流程,不强制你用特定模板引擎,也不要求重构现有 HTML——只做一件事:扫描文件并报告问题。安装后直接跑命令就能出结果,适合从 CI 入口切入,先看清现状再逐步修复。
常见错误现象:html-validate 会报出 img 缺 alt、button 缺 type、属性值未加引号、自闭合标签写法不统一(
<br>vs
<br>)等细节问题,这些在浏览器里完全不报错,但会影响可访问性和长期维护性。
- 默认规则集基于 WCAG 和 HTML Living Standard,可按项目需要删减或扩展
- 支持
.html、.htm、.njk、.hbs等多种模板后缀,通过配置files字段指定路径即可 - 不解析 JS 或 CSS,纯静态分析,所以不会因动态渲染内容误报
如何绕过历史代码干扰,只校验新增/修改部分
全量扫描老项目容易被成百上千条警告劝退。关键是把校验动作绑定到 Git 工作流里,只检查本次提交变更的 HTML 文件。
实操建议:
- 用
git diff --name-only HEAD~1 | grep "\.html$" | xargs npx html-validate快速验证上一次提交改动 - 在 CI 中用
git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA获取本次 MR 修改的 HTML 文件列表 - 配置
.htmlvalidateignore文件,把明确无法立即修复的路径(如第三方 demo 页面)列入例外,避免噪声
html-validate 的配置陷阱:别让 doctype 和 root 搞崩规则匹配
很多团队一配就报一堆“unexpected token”或“document is not valid”,根本原因是 html-validate 默认期望标准 HTML5 文档结构,而老项目常混用 ..>、XHTML 声明,甚至没声明 doctype。
解决方法:
- 在
.htmlvalidate.json中显式设置"root": true,关闭对根节点的严格校验(适用于片段模板) - 用
"extends": ["html-validate:recommended"]而非"extends": ["html-validate:latest"],后者可能引入破坏性更新 - 若项目大量使用
<template></template>或<svg></svg>作为顶层元素,需添加"rules": {"valid-charset": "off", "require-doctype": "off"}
和 ESLint / Prettier 协同时,HTML 格式化谁来管
html-validate 只检查,不格式化。想自动修复缩进、引号、属性顺序等问题,得靠 prettier + prettier-plugin-html。
关键兼容点:
-
prettier的htmlWhitespaceSensitivity设为"css"才能与大多数 CSS 框架的 class 布局逻辑一致 - 禁用
prettier的printWidth对 HTML 的影响(设为0),否则长 class 列表会被强行折行,破坏可读性 -
html-validate的indent-style规则必须关掉,否则和 Prettier 冲突,报"Expected indentation of 2 spaces but found 4"
复杂点在于:Prettier 修格式,html-validate 查语义,两者缺一不可,但又不能互相否定。最容易被忽略的是——所有校验和格式化工具都依赖文件编码识别,确保所有 HTML 文件保存为 UTF-8 without BOM,否则 Windows 下某些编辑器会悄悄插入 BOM,导致 html-validate 解析失败。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











