options
Prettier 提供了一系列格式化配置选项。
要了解 Prettier 对选项的设计理念,请参阅option-philosophy.md。
建议通过configuration.md修改选项,这样 Prettier CLI、editors.md和其他工具能识别您的配置。
实验性三元表达式 (Experimental Ternaries)
在成为默认行为前,可尝试 Prettier 的https://github.com/prettier/prettier/pull/13183。
有效选项:
true
- 使用好奇三元表达式(问号在条件后)false
- 保留默认三元表达式行为(问号与结果在同一行)
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
false | --experimental-ternaries | experimentalTernaries: <bool> |
实验性运算符位置 (Experimental Operator Position)
有效选项:
"start"
- 当二元表达式换行时,运算符在新行开头"end"
- 默认行为,运算符在上一行末尾
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
"end" | --experimental-operator-position <start|end> | experimentalOperatorPosition: "<start|end>" |
打印宽度 (Print Width)
指定格式化换行的行长度。
注意
为提升可读性,建议不超过 80 字符: 代码规范常设最大行长为 100 或 120 字符,但实际编码时开发者会通过空格拆分长行。Prettier 的 printWidth 不是硬性上限,而是期望行长的参考值。与 ESLint 的 https://eslint.org/docs/rules/max-len 不同,printWidth 指定的是首选长度而非最大允许长度。
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
80 | --print-width <int> | printWidth: <int> |
https://editorconfig.org/中的max_line_length
会覆盖此配置(Markdown 格式化可通过#prose-wrap禁用换行)。
缩进宽度 (Tab Width)
指定每级缩进的空格数。
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
2 | --tab-width <int> | tabWidth: <int> |
https://editorconfig.org/中的indent_size
或tab_width
会覆盖此配置。
使用制表符 (Tabs)
用制表符替代空格缩进。
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
false | --use-tabs | useTabs: <bool> |
https://editorconfig.org/中的indent_style
会覆盖此配置(Prettier 使用https://www.emacswiki.org/emacs/SmartTabs策略,对齐仍用空格)。
分号 (Semicolons)
控制语句末尾是否打印分号。
有效选项:
true
- 每条语句末尾添加分号false
- 仅在可能rationale.md#semicolons的行首添加
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
true | --no-semi | semi: <bool> |
引号 (Quotes)
使用单引号替代双引号。
注意:
- JSX 引号不受此选项影响(见 [jsx-single-quote](#jsx-quotes)
- 根据引号出现频率自动选择,例如
"I'm double quoted"
保持双引号,"This \"example\" is single quoted"
转为单引号
详见rationale.md#strings。
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
false | --single-quote | singleQuote: <bool> |
属性引号 (Quote Props)
控制对象属性何时加引号。
有效选项:
"as-needed"
- 仅在必需时加引号"consistent"
- 若任一属性需引号,则全部添加"preserve"
- 保留输入中的引号用法
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
"as-needed" | --quote-props <as-needed|consistent|preserve> | quoteProps: "<as-needed|consistent|preserve>" |
注意:Prettier 不会取消 Angular/TypeScript/Flow 中数字属性名的引号(Angular示例, TypeScript示例, Flow示例),Vue 同理(相关issue)。
JSX 引号 (JSX Quotes)
在 JSX 中使用单引号替代双引号。
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
false | --jsx-single-quote | jsxSingleQuote: <bool> |
尾部逗号 (Trailing Commas)
v3.0.0 起默认值从 es5
改为 all
在多行逗号分隔结构中尽可能添加尾部逗号(单行数组不添加)。
有效选项:
"all"
- 尽可能添加(包括https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas#Trailing_commas_in_functions),需 ES2017+ 环境"es5"
- 在 ES5 有效处添加(对象/数组等)"none"
- 不添加
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
"all" | --trailing-comma <all|es5|none> | trailingComma: "<all|es5|none>" |
括号间距 (Bracket Spacing)
控制对象字面量中括号内的空格。
有效选项:
true
- 示例:{ foo: bar }
false
- 示例:{foo: bar}
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
true | --no-bracket-spacing | bracketSpacing: <bool> |
对象换行 (Object Wrap)
v3.5.0 新增
控制对象字面量的换行策略。
有效选项:
"preserve"
- 若首属性前有换行则保持多行"collapse"
- 尽可能单行显示
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
"preserve" | --object-wrap <preserve|collapse> | objectWrap: "<preserve|collapse>" |
括号同行 (Bracket Line)
将多行 HTML/JSX 元素的 >
放在末行末尾而非单独一行(自闭合元素除外)。
有效选项:
true
- 示例:
<button
className="prettier-class"
id="prettier-id"
onClick={this.handleClick}>
Click Here
</button>
false
- 示例:
<button
className="prettier-class"
id="prettier-id"
onClick={this.handleClick}
>
Click Here
</button>
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
false | --bracket-same-line | bracketSameLine: <bool> |
[已弃用] JSX 括号 (JSX Brackets)
警告
v2.4.0 起弃用,改用 --bracket-same-line ::> 控制多行 JSX 元素的 >
位置(自闭合元素除外)。
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
false | --jsx-bracket-same-line | jsxBracketSameLine: <bool> |
箭头函数括号 (Arrow Function Parentheses)
v1.9.0 新增,v2.0.0 默认值从 avoid
改为 always
控制单参数箭头函数的括号。
有效选项:
"always"
- 始终保留括号,示例:(x) => x
"avoid"
- 省略括号,示例:x => x
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
"always" | --arrow-parens <always|avoid> | arrowParens: "<always|avoid>" |
省略括号虽减少视觉噪音,但添加类型注解/参数时增加修改难度,默认值提供更优开发体验。
范围格式化 (Range)
仅格式化文件片段。
通过字符偏移量(含起始/不含结束)指定范围,范围将扩展至:
- 向后:包含选中语句的首行起始
- 向前:包含选中语句的末尾
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
0 | --range-start <int> | rangeStart: <int> |
Infinity | --range-end <int> | rangeEnd: <int> |
解析器 (Parser)
指定代码解析器(通常根据文件路径自动推断)。
babel
和 flow
解析器均支持 JavaScript(含 Flow 类型注解),边缘情况可能不同。typescript
和 babel-ts
类似,后者可能支持未纳入 TypeScript 的新特性。
完整解析器列表及说明详见原文。
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
无 | --parser <string> | parser: "<string>" |
v3.0.0 起移除自定义解析器 API,改用plugins.md。
文件路径 (File Path)
指定用于推断解析器的文件名。
示例(强制使用 CSS 解析器):
cat foo | prettier --stdin-filepath foo.css
默认值 | CLI 覆盖 | API Override |
---|---|---|
无 | --stdin-filepath <string> | filepath: "<string>" |
需指令 (Require Pragma)
v1.7.0 新增
仅格式化包含特定指令(文件顶部注释)的文件。
有效指令:
/**
* @prettier
*/
或
/**
* @format
*/
默认值 | CLI 覆盖 | API Override |
---|---|---|
false | --require-pragma | requirePragma: <bool> |
插入指令 (Insert Pragma)
v1.8.0 新增
在已格式化文件顶部插入 @format
标记,常与 --require-pragma
配合使用(同时使用时后者优先级更高)。受 Facebook https://prettier.io/blog/2017/05/03/1.3.0.html#facebook-adoption-update启发。
默认值 | CLI 覆盖 | API Override |
---|---|---|
false | --insert-pragma | insertPragma: <bool> |
检查忽略指令 (Check Ignore Pragma)
v3.6.0 新增
允许文件通过顶部指令跳过格式化。
有效忽略指令:
/**
* @noprettier
*/
或
/**
* @noformat
*/
默认值 | CLI 覆盖 | API Override |
---|---|---|
false | --check-ignore-pragma | checkIgnorePragma: <bool> |
散文换行 (Prose Wrap)
v1.8.2 新增
控制 Markdown 文本的换行行为。
有效选项:
"always"
- 超行宽时换行"never"
- 取消换行(单行显示)"preserve"
- 保持原样(v1.9.0 新增)
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
"preserve" | --prose-wrap <always|never|preserve> | proseWrap: "<always|never|preserve>" |
HTML 空白敏感度 (HTML Whitespace Sensitivity)
v1.15.0 新增(Handlebars 支持始于 v2.3.0)
指定 HTML/Vue/Angular/Handlebars 的全局空白敏感度,详见https://prettier.io/blog/2018/11/07/1.15.0.html#whitespace-sensitive-formatting。
有效选项:
"css"
- 遵循 CSSdisplay
默认值"strict"
- 所有标签周围空白均有效"ignore"
- 所有标签周围空白均无效
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
"css" | --html-whitespace-sensitivity <css|strict|ignore> | htmlWhitespaceSensitivity: "<css|strict|ignore>" |
Vue 文件脚本样式缩进 (Vue files script and style tags indentation)
v1.19.0 新增
控制是否缩进 Vue 文件中 <script>
和 <style>
标签内的代码。
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
false | --vue-indent-script-and-style | vueIndentScriptAndStyle: <bool> |
行尾符 (End of Line)
v1.15.0 新增,v2.0.0 默认值从 auto
改为 lf
有效选项:
"lf"
- 仅换行符(\n
),Linux/macOS 和 git 仓库常用"crlf"
- 回车+换行(\r\n
),Windows 常用"cr"
- 仅回车符(\r
),极少使用"auto"
- 保持现有行尾(混合时以首行后内容为准)
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
"lf" | --end-of-line <lf|crlf|cr|auto> | endOfLine: "<lf|crlf|cr|auto>" |
https://editorconfig.org/中的end_of_line
会覆盖此配置。
嵌入式语言格式化 (Embedded Language Formatting)
v2.1.0 新增
控制是否格式化文件中嵌入的代码(如 JavaScript 中的 html
标签模板或 Markdown 代码块)。
有效选项:
"auto"
- 自动识别并格式化嵌入代码"off"
- 永不自动格式化
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
"auto" | --embedded-language-formatting=<off|auto> | embeddedLanguageFormatting: "<off|auto>" |
单属性同行 (Single Attribute Per Line)
v2.6.0 新增
强制 HTML/Vue/JSX 中每行只包含一个属性。
默认值 | CLI 覆盖 | API 覆盖 |
---|---|---|
false | --single-attribute-per-line | singleAttributePerLine: <bool> |
总结
本文全面解析了 Prettier 的格式化配置选项,涵盖代码风格控制的各个方面:
- 基础格式:包括缩进方式(空格/制表符)、行宽限制、引号规则等核心设置
- 高级特性:实验性三元表达式、运算符位置等前沿功能
- 语言专项:针对 HTML/JSX/Vue 的特殊处理规则
- 工作流集成:指令控制、范围格式化等协作场景功能
- 跨平台兼容:行尾符统一方案解决 OS 差异问题
所有选项均支持 CLI 参数、API 配置和文件覆盖三种方式,建议通过配置文件统一管理。特殊注意事项已用警告块标出,关键概念附设计原理链接供深度参考。