Prettier仅格式化不校验HTML合法性,无法捕获闭合错位、缺alt、ARIA属性缺失等语义错误;必须用html-validate或tidy等工具进行W3C和WCAG标准校验。

HTML 文件在提交前不校验,会导致大量格式混乱、语义错误、可访问性缺失的代码进入主干——尤其在多人协作或 CMS/SSR 混合渲染项目中,prettier 单独处理不够,html-validate 或 tidy 才是真正兜底的检查手段。
为什么 pre-commit 里不能只跑 Prettier?
Prettier 只做格式化,不校验 HTML 合法性。比如: 关键点:匹配路径要精确,命令执行顺序要合理,失败必须中断提交。 不是配置写了就生效,本地 Git 钩子链路容易断在三个环节。 把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。 开箱即用的 真正卡住落地的,从来不是工具链拼装,而是 HTML 校验规则与框架/模板引擎的语义对齐——没配对插件的 缺 alt、role="button" 没配 tabindex 或事件监听器,Prettier 完全无视。这类问题必须靠语义校验工具捕获。
html-validate 基于 W3C 标准和可访问性(WCAG)规则,支持自定义配置,输出清晰错误定位tidy 更轻量,适合快速修复基础语法,但规则粒度粗、不支持现代 ARIA 属性校验eslint-plugin-html,它只覆盖内联 JS 和模板字符串里的 HTML 片段,无法校验独立 .html 文件lint-staged 配置 HTML 校验的正确写法
package.json 的 lint-staged 字段中,明确声明 *.{html,htm} 模式,避免被 *.{js,ts} 规则误吞"*.{html,htm}": ["html-validate --fix", "prettier --write"] —— 先语义校验并自动修正常见结构问题,再统一格式html-validate 报错(如缺失 lang 属性),lint-staged 默认会终止流程,不执行后续命令;无需额外加 && 或 ||
html-validate CLI 不支持 --fix,需升级到 v4.0+;否则去掉该参数,仅保留只读校验Husky pre-commit 钩子失效的常见原因
npx husky add .husky/pre-commit "npx lint-staged" 后,检查 .husky/pre-commit 文件首行是否为 #!/usr/bin/env sh,Windows 用户可能生成 #!/bin/sh 导致权限拒绝prepare 脚本没生效:确认 package.json 里有 "prepare": "husky install",且团队成员运行过 npm install(或 pnpm install)——只有这时 husky install 才真正写入 .git/hooks/
core.hooksPath,Husky 会退回到手动复制钩子逻辑,若 .git/hooks/ 下已有同名文件(如 pre-commit.sample),可能被覆盖失败HTML 校验规则容易被忽略的细节
html-validate 规则集(如 html-validate:recommended)对 Vue/React 项目并不友好——它默认把 v-if、v-for、jsx 当作非法属性报错。
.htmlvalidate.json 中启用对应插件:"plugins": ["html-validate-vue"] 或 ["html-validate-react"]
no-unknown-attributes 规则,或白名单添加 include、extends 等指令html-validate 默认不检查内联 CSS/JS,如需校验 里的 display: flex 是否兼容目标浏览器,得额外集成 stylelint 并在 lint-staged 中单独配置 *.html 的 stylelint 子任务html-validate 在 Vue 项目里基本等于废柴。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










