CI中必须用prettier --check校验HTML格式,返回非零码即中断构建;需提交.prettierrc配置tabWidth:2、htmlWhitespaceSensitivity:"css"、printWidth:100,并搭配Husky预提交强制格式化,杜绝编辑器差异导致的git diff污染。

CI/CD 流程里加 HTML 格式化,不是“要不要做”,而是“必须在 lint 阶段就卡住不规范代码”。靠人工检查或编辑器保存格式化,进不了构建流水线——它只对本地有效,一到 CI 就失效。
怎么用 Prettier 在 CI 中强制校验 HTML 格式
Prettier 是目前唯一能在 CI 中稳定执行 HTML 格式校验的通用工具,它不依赖 DOM、不解析运行时逻辑,纯文本级比对,适合 Git Hook 和 CI 两层守门。
- 安装:
npm install --save-dev prettier - 配置
.prettierrc(必须提交到仓库):{ "tabWidth": 2, "htmlWhitespaceSensitivity": "css", "printWidth": 100, "singleQuote": false, "bracketSameLine": false } - 添加校验脚本(不修改文件,只报错):
"lint:html": "prettier --check \"**/*.html\"" - CI 中直接运行该命令:返回非零码即中断构建
为什么不能只靠 VS Code 保存自动格式化
VS Code 的 editor.formatOnSave 只作用于单机,且依赖用户是否启用插件、是否装了 Prettier、是否没禁用该语言模式。团队中只要一人漏配,git diff 就会混入缩进差异,导致 PR 里全是无关的空格变更。
- 真实问题:某次合并后,
package.json里多出 37 行空格变更,只因两人用了不同 tabSize - 根本原因:编辑器行为不可版本化,而
.prettierrc可以 - 解决方案:Git Hook(如 Husky + lint-staged)在 commit 前跑
prettier --write,再提交;CI 再跑--check双重保险
PHP 模板文件(.php 含 HTML)怎么处理
PHP 文件里的 HTML 片段,Prettier 默认不处理(它只认 .html 扩展名),但 php-cs-fixer 能识别 PHP 语法块并保留 HTML 结构,更适合混合场景。
立即学习“前端免费学习笔记(深入)”;
- 安装:
composer require --dev friendsofphp/php-cs-fixer - 配置
.php-cs-fixer.php,启用 HTML 相关规则:return PhpCsFixer\Config::create() ->setRules([ 'html' => true, 'no_unused_imports' => true, 'array_syntax' => ['syntax' => 'short'], ]) ->addFinder(PhpCsFixer\Finder::create()->in(['templates', 'views'])->name('*.php')); - CI 中运行:
php-cs-fixer fix --dry-run --diff(失败时输出 diff 并退出) - 注意:
php-cs-fixer不会重排 HTML 层级缩进,只保证 PHP 语法合规 + 基础 HTML 属性对齐;深层嵌套仍需 Prettier 单独处理.html文件
最易被忽略的一点:HTML 格式化和可访问性检查是两件事。Prettier 管结构对齐,axe-core 管运行时语义缺陷,html-validate 管源码级合规(比如漏 alt、错用 aria-hidden)。三者缺一不可,但顺序不能乱——先 Prettier 格式化,再 html-validate 检源码,最后 axe-core 运行时扫描。



















