HTML格式化规范落地难的根源在于未嵌入保存、提交、构建任一节点;须配置VS Code语言专属格式化、.prettierrc关键选项、husky+lint-staged提交拦截、CI严格校验及a11y协同检查。

HTML格式化规范在团队中无法落地,根本原因不是没人写,而是没有把格式化检查嵌入到保存、提交、构建三个关键节点中的任意一个;光靠口头约定或文档,prettier和editorconfig就只是摆设。
VS Code 保存时自动格式化必须配对生效
仅安装 Prettier 插件不等于自动格式化——它默认不接管 HTML,且容易被其他插件(如 Auto Rename Tag)干扰。
- 在工作区设置中显式启用:
"html.format.enable": true,并设"editor.defaultFormatter": "esbenp.prettier-vscode" - 禁用冲突格式化器:
"editor.formatOnSave": true+"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }(必须用语言专属配置,否则 JS/TS 文件会误触发) -
.prettierrc里至少明确指定"tabWidth": 2、"useTabs": false、"htmlWhitespaceSensitivity": "ignore"——后者防止 Prettier 错误折叠内联文本换行 - 若项目含 PHP 混合模板(
.php),需额外配"prettier.parser": "html"或改用php-cs-fixer统一处理,否则<?php ?>块内缩进会错乱
Git 提交前拦截未格式化 HTML 的真实路径
只靠编辑器保存格式化,新人或临时切分支仍可能提交脏代码;必须让git commit自己拒绝不合规文件。
- 用
husky+lint-staged组合:npx husky add .husky/pre-commit "npx lint-staged" -
package.json中配置:"lint-staged": { "*.html": ["prettier --write", "git add"] }——注意顺序:先写入再git add,否则暂存区仍是旧内容 - 避免通配符过宽:
**/*.html会扫进node_modules或构建产物目录,应限定为src/**/*.html或app/views/**/*.html.erb(按实际路径) - 若团队用
editorconfig,确保.editorconfig已提交,并在lint-staged中加"*.html": ["editorconfig-checker"]校验缩进/换行是否匹配
CI 中格式化失败必须中断构建而非发报告
CI 流水线里跑prettier --check **/*.html却忽略退出码,等于没做;格式问题必须阻断合并。
立即学习“前端免费学习笔记(深入)”;
- 命令必须带
--max-warnings 0(Prettier v3+)或--no-error-on-unmatched-pattern(防路径为空报错),但核心是保留非零退出码 - 禁止写
prettier --check || true——这是静默失败最常见的写法 - 路径要精确:
prettier --check "src/**/*.html" "templates/**/*.html",双引号防 shell 展开错误 - 若项目混用
.vue或.svelte,需额外加--parser html参数,否则<template>块可能被误判为 JS
最易被忽略的是 HTML 格式化与可访问性检查的耦合点:比如prettier会把<img alt="">格式化成单行,但htmlhint要求alt非空;这两者规则必须同步校验,否则格式化越“干净”,a11y 越危险。



















