You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何设置printWidth=200后Prettier仍换行return foo(?

问题

格式化代码时,Prettier 会自动把return foo(换行到新行。明明已经设置了printWidth = 200,且单行有足够空间容纳代码,这是为什么?如何阻止这种换行?不想用prettier-ignore这类临时方案,有没有对应的配置项可以控制这个行为?

示例代码

function foo() { // 我不关心代码是否能运行,只在意格式化结果
  /*
  return foo('test', baz`
    some text here
  `);
  */

  return foo(
    'test',
    baz`
    some text here
  `
  );
}

当前 Prettier 配置

{
  "singleQuote": true,
  "arrowParens": "always",
  "semi": true,
  "trailingComma": "es5",
  "bracketSameLine": true,
  "printWidth": 200
}

期望格式化效果

return foo('test', baz`
    some text here
`);
原因与解决方案

原因

Prettier 对包含**模板字面量(template literal)**的函数调用有特殊换行逻辑:当函数参数中存在多行模板字面量时,无论printWidth设置多大,Prettier 默认都会将函数调用拆分为多行。它认为这类多行内容会降低单行可读性,属于“强制换行”场景,不受printWidth约束。

解决方案

目前 Prettier 没有专门配置项直接关闭该行为,但可通过调整expressionSpacing配置(仅支持 Prettier 2.4.0+)间接实现:

修改.prettierrc,添加"expressionSpacing": false:

{
  "singleQuote": true,
  "arrowParens": "always",
  "semi": true,
  "trailingComma": "es5",
  "bracketSameLine": true,
  "printWidth": 200,
  "expressionSpacing": false
}

该配置会取消函数调用括号内的额外缩进,同时改变 Prettier 对含多行模板字面量的函数调用的换行判断逻辑,使其优先保持单行,符合期望效果。

注意:expressionSpacing会影响所有表达式的空格处理,比如a + b会变为a+b。若需保留表达式空格,此方案不适用,这种情况下暂时无完美配置项解决,只能接受 Prettier 默认行为,或使用// prettier-ignore作为临时折中方案。

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:21:02