HTMLHint需显式启用tag-pair、attr-lowercase等核心规则并置于项目根目录的.htmlhintrc中,否则无法拦截标签未闭合、属性大小写混用等低级错误;CI中须配置SARIF输出、set -e或|| exit 1确保失败中断流程。
HTMLHint不是装上就起作用的,它默认规则太宽松,tag-pair、attr-lowercase这些基础项必须显式启用,否则连 <div></div> 这种大小写混用都报不出来。
关键配置点:
.htmlhintrc 必须放在项目根目录,且不能被 .gitignore 忽略"rules": {} 里的 "*": true 这类通配启用doctype-first 和 lang-require,否则 标签缺 lang 不会报错.njk、.php)需额外加 "file-ext": ["html", "njk", "php"]
常见现象是 npx htmlhint "**/*.html" 报错后流程仍继续,根本原因是 shell 默认遇到非零退出码不终止。CI 脚本里没加 set -e 或没处理命令返回值。
正确写法:
立即学习“前端免费学习笔记(深入)”;
run: npx htmlhint "**/*.html" 单独成 step,别和 npm install 合并在一行if: always() 会导致失败也被忽略,必须删掉npx htmlhint src/**/*.html --config .htmlhintrc || exit 1
continue-on-error: false(默认就是 false,但显式写出来更安全)纯命令行输出对协作无效,得转成 GitHub 原生支持的 SARIF 格式,否则检查结果只在 Action 日志里滚动,没人看。
实操步骤:
npm install @htmlhint/sarif-reporter --save-dev
npx htmlhint --format=@htmlhint/sarif-reporter --output=report.sarif.json "**/*.html"
github/code-scanning action 解析 report.sarif.json
直接跑 htmlhint *.php 会把 PHP 标签当非法 HTML 解析,报一堆 php、echo 未闭合的假错误。
两种解法:
php-cs-fixer 处理 PHP 模板,它内置 HTML 检查逻辑,能识别 <?php ?> 边界sed 或 awk 提取纯 HTML 片段再喂给 HTMLHint(不推荐,易漏逻辑)php-cs-fixer 负责 PHP+HTML 混排,htmlhint 只扫纯 .html 文件混排文件的检查边界容易模糊,别指望一个工具包打天下,按文件类型切分职责才是实际可行的路。