Prettier的printWidth设置后代码还是换行了是怎么回事?

技术玉曼 阅读 33

在React项目里设置了Prettier的printWidth为80,但写长字符串时代码还是在80字符前强行换行了。比如写这种JSX:

{`const longText = '这个字符串明明没到80个字符,保存后Prettier就自动拆分成两行了,看起来好乱';
}</code></pre>

<p>我检查了.prettierrc配置:</p>

<pre class="pure-highlightjs line-numbers"><code class="language-json">{

{
"printWidth": 80,
"tabWidth": 2,
"singleQuote": true
}`}

也确认了VSCode插件版本最新,重启过编辑器,但问题依旧。难道是和ESLint冲突?还是有其他隐藏配置覆盖了设置?

我来解答 赞 8 收藏
二维码
手机扫码查看
2 条解答
シ弋焱
シ弋焱 Lv1
嗯,这种情况我遇到过。Prettier的printWidth确实是个让人头大的点,它只是个参考值,不是硬性限制。即使你设置了80,Prettier还是会根据代码结构和优先级来决定换行。

你这个长字符串的问题,可能是JSX里特殊处理导致的。Prettier会对JSX里的内容做一些额外格式化,尤其是当它认为换行会让代码更可读时。

先检查下是不是ESLint冲突的问题。如果你用了eslint-plugin-prettier,确保它的规则和Prettier保持一致。可以在.eslintrc里加:

{
"prettier/prettier": ["error", { "printWidth": 80 }]
}


如果还是不行,试试加个// prettier-ignore注释强制忽略那块代码的格式化:

{// prettier-ignore
const longText = '这个字符串明明没到80个字符,保存后Prettier就自动拆分成两行了,看起来好乱';
}


最后,更新下Prettier插件到最新版,之前有几版对JSX的处理确实有点问题。实在不行,就把printWidth调大一点试试,比如100。反正这玩意儿本来就是个建议值,不用太纠结。
点赞 11
2026-02-01 17:06
红辰~
红辰~ Lv1
printWidth只是个建议宽度,Prettier会根据语义和可读性决定是否换行。长字符串里如果包含特殊结构(比如模板字符串、JSX等),可能会提前换行。懒人方案:把字符串切成小块用+拼接,或者直接无视它,反正电脑又不会看代码。真要强制一行,试试这样:

const longText = 这个字符串明明没到80个字符,保存后Prettier就自动拆分成两行了,看起来好乱; // 加个反斜杠转义


不过不推荐,毕竟Prettier的设计就是让人少操心格式。
点赞 7
2026-01-29 08:08