Prettier 2.6.2格式化HTML代码时出现异常改动问题咨询
问题原因
该格式化结果不是程序bug,是Prettier处理HTML内容的默认逻辑导致的:
- 原始代码中
</head>闭合标签与后续<!-- ddd -->注释之间没有任何空白字符(空格、换行),Prettier核心设计原则之一是不随意增删HTML中的空白字符,避免破坏行内元素的默认渲染间距,因此不会主动在这两个内容之间插入分隔用的空格或换行。 - Prettier排版时会将没有空白分隔的闭合标签、注释识别为一段连续内容,当触发断行逻辑时,只会选择HTML语法允许拆分的位置断行——也就是闭合标签的
>符号前,最终就出现了</head与>拆分到两行的结果。
注:该行为和你设置的printWidth=120没有直接关联,Prettier的printWidth是排版参考值不是严格阈值,当没有合法的节点间断行点时,不会为了满足行宽要求主动创造节点分隔。
解决方案
按推荐优先级排序:
- 调整代码书写习惯:在闭合标签和后续同级注释之间添加换行,将注释单独占一行。这种写法本身代码可读性更高,也能让Prettier正确识别两个独立的同级节点,从根源上避免标签拆分问题。调整后的代码片段如下:
<!DOCTYPE html> <html> <head> <title>X</title> </head> <!-- ddd --> <body></body> </html>
- 修改Prettier全局配置:如果不想调整现有代码写法,可在
.prettierrc.json中添加配置项"htmlWhitespaceSensitivity": "ignore"。该配置会让Prettier忽略HTML空白对渲染的影响,自动在相邻标签、注释之间补充合适的分隔空白,不会再出现拆分闭合标签尖括号的情况。 - 局部忽略格式化:如果某段代码需要保留特殊写法,可在代码段前后添加
<!-- prettier-ignore -->注释跳过对应片段的格式化,该方案不推荐大范围使用,会增加代码维护成本。
内容的提问来源于stack exchange,提问作者user12950273
相关产品推荐
相关产品推荐

