
Prettier 目前不支持将 HTML 开始标签的首个属性保留在同一行(即 <div class="..." 形式),无论配置如何调整,它总会将第一个属性换行;这是其固有设计决策,而非可配置行为。
prettier 目前不支持将 html 开始标签的首个属性保留在同一行(即 `
Prettier 的设计理念是“约定优于配置”——它刻意限制选项数量,以确保团队间代码风格高度统一。在 HTML 格式化中,Prettier 始终采用 强制换行 + 缩进对齐 的策略:即使 printWidth 足够宽、singleAttributePerLine: true 已启用,它仍会将起始标签的首属性(如 class)移至下一行,并统一缩进所有属性:
<!-- Prettier 总是输出这种格式(不可更改) --> <div class="test-class" [test-binding]="true" (test-binding)="test()" any-attr> </div>
而非你期望的紧凑单行起始形式:
<!-- ❌ Prettier 无法生成此格式 -->
<div class="test-class"
[test-binding]="true"
(test-binding)="test()"
any-attr>
</div>⚠️ 注意事项:
- singleAttributePerLine: true 仅控制「是否每个属性独占一行」,但不改变首行是否包含标签名;它默认为 false,设为 true 后效果是所有属性(包括第一个)都换行并缩进,反而更偏离目标。
- 调整 printWidth(如设为 200)也无效——Prettier 对 HTML 标签的换行逻辑是基于语法结构而非字符宽度。
- 官方文档明确未提供 firstAttributeOnSameLine、keepOpeningTagOnOneLine 等类似选项,且该行为被归类为 intentional limitation,社区多次提案均未被采纳。
✅ 替代方案建议:
立即学习“前端免费学习笔记(深入)”;
- 若此格式对团队至关重要,可考虑切换至更灵活的格式化工具(如 Prettyhtml 或 eslint-plugin-prettier 配合自定义 ESLint 规则进行校验,但无法真正格式化)。
- 或接受 Prettier 的一致性优先原则,在团队规范中统一适应其输出风格——这正是 Prettier 的核心价值所在:消除争议,聚焦逻辑而非样式。
总之,这不是配置遗漏,而是设计取舍。与其寻找不存在的选项,不如评估是否真需打破 Prettier 的一致性契约。



















