Prettier的printWidth设置后代码还是换行了是怎么回事?
在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冲突?还是有其他隐藏配置覆盖了设置?
printWidth确实是个让人头大的点,它只是个参考值,不是硬性限制。即使你设置了80,Prettier还是会根据代码结构和优先级来决定换行。你这个长字符串的问题,可能是JSX里特殊处理导致的。Prettier会对JSX里的内容做一些额外格式化,尤其是当它认为换行会让代码更可读时。
先检查下是不是ESLint冲突的问题。如果你用了
eslint-plugin-prettier,确保它的规则和Prettier保持一致。可以在.eslintrc里加:如果还是不行,试试加个
// prettier-ignore注释强制忽略那块代码的格式化:最后,更新下Prettier插件到最新版,之前有几版对JSX的处理确实有点问题。实在不行,就把
printWidth调大一点试试,比如100。反正这玩意儿本来就是个建议值,不用太纠结。printWidth只是个建议宽度,Prettier会根据语义和可读性决定是否换行。长字符串里如果包含特殊结构(比如模板字符串、JSX等),可能会提前换行。懒人方案:把字符串切成小块用+拼接,或者直接无视它,反正电脑又不会看代码。真要强制一行,试试这样:不过不推荐,毕竟Prettier的设计就是让人少操心格式。