pre-commit钩子未执行HTML检查是因为lint-staged配置中未显式声明*.html等匹配规则,且需确保工具支持(如html-validate)、文件未被.gitignore忽略、路径使用正斜杠。

pre-commit 钩子里为什么没跑 HTML 检查?
因为 lint-staged 默认不匹配 .html 文件——它只处理你在配置里显式声明的扩展名。如果你的 lint-staged 配置里没写 "*.html" 或 "*.{html}",那 HTML 文件压根不会被传给任何命令。
常见错误现象是:改了 HTML、git add index.html、执行 git commit,但 ESLint/Stylelint 完全没触发,提交直接成功。
- 检查
package.json中lint-staged字段是否包含"*.html"或更宽泛的"*.{html,htm}" - 确保你用的 lint 工具实际支持 HTML:比如
eslint-plugin-html(配合 ESLint)、stylelint(需配stylelint-processor-html)或html-validate - 别依赖 glob 通配符自动覆盖:
"*"不等于"*.*",也不包含无扩展名文件;"**/*"可能匹配太多,且受.gitignore影响
HTML 文件该用哪个工具检查?
ESLint 默认不解析 HTML,Prettier 对 HTML 支持有限(仅基础格式化),所以得按检查目标选工具:
- 语义/可访问性/结构问题 → 用
html-validate(推荐):"*.html": ["html-validate --no-color"] - 内联 JS/CSS 的代码风格 → 用
eslint-plugin-html:"*.html": ["eslint --fix --ext .html"](需在 ESLint 配置中启用该插件) - CSS 样式规范 → 用
stylelint+stylelint-processor-html:"*.html": ["stylelint --fix --custom-processors stylelint-processor-html"] - 纯格式化(缩进、引号等)→
prettier能处理,但别指望它修复aria-*错误或标签嵌套问题
混用多个工具时注意顺序:比如先 prettier --write 再 html-validate,否则格式化可能引入新 warning。
立即学习“前端免费学习笔记(深入)”;
为什么 HTML 检查总被跳过?
lint-staged 会读取 .gitignore,如果 HTML 文件路径被忽略(例如 dist/*.html 或 public/index.html 被 ignore),即使你 git add 了,它也不会传给检查命令。
- 运行
git status --ignored确认目标 HTML 文件确实处于 “staged” 状态(显示为绿色,非灰色) - 临时注释掉
.gitignore相关行,测试是否恢复检查 - 避免在
lint-staged配置里用绝对路径或src/**这类模式匹配根目录下 HTML(如index.html在项目根)——应直接写"*.html" - Windows 用户注意路径分隔符:
lint-staged内部用 Node.js 的path模块,统一用正斜杠,别写"src\*.html"
HTML 检查失败后 git commit 卡住,怎么调试?
失败时 git commit 会终止并输出命令的原始 stderr,但信息常被截断或不够具体。关键不是看“哪里错了”,而是确认“哪条命令在跑、对哪些文件跑”:
- 在
lint-staged配置里加个调试步骤:"*.html": ["echo 'checking $1' && html-validate $1"]($1是 lint-staged 传入的文件路径) - 手动模拟执行:
npx lint-staged --debug --verbose *.html,它会打印出所有匹配文件和最终执行的完整命令 - 检查 exit code:HTML 工具返回非 0(如
html-validate有 warning 默认就退出 1),lint-staged就中止 commit;加--max-warnings=0这类参数无效,得看对应工具文档(例如html-validate用--max-warnings 0)
最易被忽略的是:HTML 检查工具往往默认只报告 error,但有些配置(比如 html-validate 的 preset)把严重 warning 当作 error 处理,而开发者误以为只是 warning —— 实际上它已阻断 commit。



















