真正提升html协作效率的关键在于可落地的约束机制:必须配置eslint-plugin-html的overrides规则、启用prettier-plugin-attributes排序属性、统一引号与自闭合标签风格,并在ci中直接扫描源码而非构建产物。

团队协作中,HTML 代码质量不靠个人自觉,靠可落地的约束机制。没有校验、没有统一入口、没有错误反馈闭环,规范就是废纸。
怎么让 eslint-plugin-html 真正跑起来
很多人装了插件但 eslint 始终不检查 HTML 中的 JS 或属性拼写,根本原因是没配解析器链。它默认只处理 .js 文件,对 .html 文件无感知。
- 必须在
.eslintrc.js中显式声明overrides,把files: ["*.html"]和processor: "html/html"配上 -
parserOptions要设sourceType: "module",否则内联<script type="module"></script>会报错 - 禁用
no-unused-vars在 HTML 模板里——v-for、ng-repeat的变量会被误判
示例关键配置片段:
overrides: [{
files: ["*.html"],
processor: "html/html",
rules: {
"no-unused-vars": "off",
"html/indent": ["error", 2]
}
}]
prettier 对 HTML 的缩进和属性排序失效怎么办
开箱即用的 prettier 默认不格式化 HTML 属性顺序,也不强制闭合标签风格(如 <br> vs <br>),容易引发 diff 冲突。
- 加
prettier.config.js,启用htmlWhitespaceSensitivity: "css"避免换行误删 - 用
prettier-plugin-organize-imports不管用——它只理 JS;HTML 属性排序得靠prettier-plugin-sort-imports的兄弟项目prettier-plugin-attributes(需手动安装) - 团队必须统一
singleQuote: true和htmlSelfClosingTag: true,否则<img src="x">和<img src="x">会反复来回变
CI 里 HTML 校验总过不了,但本地没问题
常见原因是本地运行的是开发时的热更新服务(如 Vite dev server),它自动注入 HMR 脚本、补全 <base>、甚至重写 <link>,而 CI 执行的是原始文件 lint,二者输入不一致。
- CI 脚本里必须用
eslint --ext .html,.js src/直接扫描源码,别依赖构建产物 - 排除
node_modules和dist是基础,但更要排除自动生成的index.html(比如 Webpack 插件产出的)——这类文件不该进 Git,应加进.eslintignore - 如果用了
html-webpack-plugin,它的模板语法()会让eslint-plugin-html解析失败,得在processor配置里加html: { customSyntax: "html" }并禁用相关规则
最常被跳过的环节是:没人验证规范是否真能拦截典型错误。比如 class="btn btn-primary" 写成 class="btn-primary btn" 是否触发警告?这得靠真实 case 测,而不是看文档说“支持 class 检查”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











