htmlhint 配置需适配 html5 及模板语法,关闭默认严格规则;eslint+prettier 无法覆盖可访问性等语义问题,须引入 axe-core 等补充;lint-staged 中 html 文件须链式执行 prettier 后 htmlhint;editorconfig 与 ide 格式化需统一缩进设置。

HTMLHint 配置必须匹配项目实际语法风格
HTMLHint 默认规则偏向严格 XHTML 风格,比如会报错 <img src="x.jpg">(缺少闭合),但现代 HTML5 允许这种写法。不改配置就直接用,会导致大量误报。
常见踩坑点是没覆盖默认规则,尤其在 Vue/React 项目中内嵌 HTML 片段时:htmlhint 默认不识别 v-if、v-for 或 jsx 属性,会当成非法属性报错。
- 必须新建
.htmlhintrc文件,显式关闭干扰项:"attr-lowercase": false(允许大写属性名)、"tag-self-close": false(禁用自闭合校验) - 对模板类项目,加
"attr-req-value": false和"attr-no-duplication": false,否则v-bind:title或:class会被拦 - 若用 Webpack + html-webpack-plugin,需在插件配置里传入
htmlhint: { options: {...} },否则 CLI 检查通过,构建时仍报错
ESLint + Prettier 组合对 HTML 内联脚本的处理边界
ESLint 只管 <script></script> 块里的 JS,不管 HTML 结构;Prettier 能格式化整个 .html 文件,但默认不校验语义或可访问性。两者叠加时,容易漏掉关键问题。
比如 <input type="text" required> 缺少 label 关联,eslint 不报,prettier 也不动——这属于可访问性缺陷,必须靠 axe-core 或 html-validate 补位。
-
prettier的htmlWhitespaceSensitivity设为"css"才能正确处理 inline 元素间的换行,设成"strict"会把<span>a</span><span>b</span>强制拆成多行,破坏布局 - ESLint 的
eslint-plugin-html插件可提取 script/style 块交给 ESLint 处理,但不支持<template></template>(Vue)或<script setup></script>,需额外配eslint-plugin-vue - 如果用
prettier格式化后 ESLint 报no-unused-vars,大概率是 Prettier 把变量重命名了(如const foo = 1→const _foo = 1),这时要关掉 Prettier 的proseWrap或换用eslint-config-prettier屏蔽冲突规则
Git pre-commit hook 中 lint-staged 对 HTML 文件的执行顺序陷阱
lint-staged 默认按 glob 匹配并行执行任务,但 HTML 文件常同时被 htmlhint、prettier、stylelint(处理内联 style)调用。顺序错乱会导致格式化后又被 lint 报错,或修复被覆盖。
典型现象:保存后 prettier 把缩进改成 2 空格,htmlhint 却按 4 空格规则检查,立刻标红。
- 必须在
lint-staged配置中明确链式调用:"*.html": ["prettier --write", "htmlhint"],不能写成["prettier --write", "htmlhint"]无 glob 键,否则所有文件都跑一遍 - 若项目含内联 CSS/JS,
stylelint和eslint必须放在prettier之后,否则 Prettier 格式化会破坏 stylelint 认为合法的缩进(如 CSS 属性换行位置) - 注意
htmlhint的 exit code:默认错误时返回 1,但某些旧版lint-staged会因非零退出码中断流程,需加--quiet或升级到 v15+ 并启用ignore选项跳过警告
EditorConfig 与 IDE HTML 格式化功能的冲突点
EditorConfig 控制基础缩进/换行,但 WebStorm、VS Code 的 HTML 格式化引擎(如 VS Code 的内置 HTML formatter)有独立设置。两者不一致时,保存即打架。
例如 EditorConfig 设 indent_size = 2,而 WebStorm 的 HTML 代码风格设为 4 空格缩进,结果每次保存 HTML 文件,缩进先被 EditorConfig 调整为 2,再被 WebStorm 强制拉回 4。
- VS Code 用户必须关掉内置 formatter:
"html.format.enable": false,改用esbenp.prettier-vscode插件,并确保其prettier配置与.editorconfig中的indent_size一致 - WebStorm 用户要在
Settings > Editor > Code Style > HTML > Tabs and Indents里勾选Use tab character吗?别——除非.editorconfig明确写了indent_style = tab,否则保持空格,且Tab size和Indent都设为 2 - Sublime Text 的
HTML-CSS-JS Prettify插件默认无视.editorconfig,必须手动在插件设置里填"indent_size": 2,否则它坚持用 4 空格格式化<div> 嵌套 实际落地时,最易被忽略的是 HTML 的“语义层”和“结构层”检查分离——<code>htmlhint管结构,axe-cli管语义,prettier管格式,三者缺一不可,但没人自动帮你串起来。











