Prettier 为什么没格式化我的 HTML 标签换行?
我用 Prettier 格式化 HTML 文件,但发现它没把长标签自动换行,看起来特别挤。明明在 .prettierrc 里设置了 printWidth: 80,为啥不起作用?
比如下面这段代码,Prettier 格式化后还是一整行:
<div class="card" style="background-color: white; padding: 16px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
<h2>Hello World</h2>
</div>
是我配置错了,还是 Prettier 对 HTML 的换行支持有限?
Prettier 对 HTML 的处理逻辑跟 JavaScript 不太一样。它默认不会因为超过 printWidth 就把 HTML 属性换行,这是官方故意的设计决策——他们认为属性换行会导致 git diff 很难看。
解决方案有两个:
一是检查你的 Prettier 版本。如果是 2.x 系列,可以尝试在 .prettierrc 里加这个配置:
不过说实话,这个选项主要影响的是属性之间的空格处理,对换行帮助有限。
二是接受现实,要么手动把长属性拆成多行,要么忍忍。我之前项目里遇到这种情况,最后都是手动调整的,或者用 HTML 格式化插件配合 VS Code 的格式化功能。
对了,如果你用的是 Vue 文件里的 template,情况和 HTML 是一样的,都受这个行为约束。