xDocxDoc
AI
前端
后端
iOS
Android
Flutter
AI
前端
后端
iOS
Android
Flutter
  • 关于

    • Prettier
    • 构建并强制执行
    • Prettier vs. Linters
    • 选项设计原理
    • 设计理念
  • 使用

    • 安装指南
    • 忽略代码
    • precommit
    • 插件
    • CLI
    • API
    • Browser
    • CI
  • 配置 Prettier

    • options
    • Configuration File
    • 共享配置
  • Editors

    • 编辑器集成
    • WebStorm 设置
    • Vim 配置指南
    • 监视文件变更
  • Misc

    • 技术实现细节
    • 生态
    • 企业解决方案

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-ternariesexperimentalTernaries: <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-tabsuseTabs: <bool>

https://editorconfig.org/中的indent_style会覆盖此配置(Prettier 使用https://www.emacswiki.org/emacs/SmartTabs策略,对齐仍用空格)。

分号 (Semicolons)

控制语句末尾是否打印分号。

有效选项:

  • true - 每条语句末尾添加分号
  • false - 仅在可能rationale.md#semicolons的行首添加
默认值CLI 覆盖API 覆盖
true--no-semisemi: <bool>

引号 (Quotes)

使用单引号替代双引号。

注意:

  • JSX 引号不受此选项影响(见 [jsx-single-quote](#jsx-quotes)
  • 根据引号出现频率自动选择,例如 "I'm double quoted" 保持双引号,"This \"example\" is single quoted" 转为单引号

详见rationale.md#strings。

默认值CLI 覆盖API 覆盖
false--single-quotesingleQuote: <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-quotejsxSingleQuote: <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-spacingbracketSpacing: <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-linebracketSameLine: <bool>

[已弃用] JSX 括号 (JSX Brackets)

警告

v2.4.0 起弃用,改用 --bracket-same-line ::> 控制多行 JSX 元素的 > 位置(自闭合元素除外)。

默认值CLI 覆盖API 覆盖
false--jsx-bracket-same-linejsxBracketSameLine: <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-pragmarequirePragma: <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-pragmainsertPragma: <bool>

检查忽略指令 (Check Ignore Pragma)

v3.6.0 新增

允许文件通过顶部指令跳过格式化。

有效忽略指令:

/**
 * @noprettier
 */

或

/**
 * @noformat
 */
默认值CLI 覆盖API Override
false--check-ignore-pragmacheckIgnorePragma: <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" - 遵循 CSS display 默认值
  • "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-stylevueIndentScriptAndStyle: <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-linesingleAttributePerLine: <bool>

总结

本文全面解析了 Prettier 的格式化配置选项,涵盖代码风格控制的各个方面:

  1. 基础格式:包括缩进方式(空格/制表符)、行宽限制、引号规则等核心设置
  2. 高级特性:实验性三元表达式、运算符位置等前沿功能
  3. 语言专项:针对 HTML/JSX/Vue 的特殊处理规则
  4. 工作流集成:指令控制、范围格式化等协作场景功能
  5. 跨平台兼容:行尾符统一方案解决 OS 差异问题

所有选项均支持 CLI 参数、API 配置和文件覆盖三种方式,建议通过配置文件统一管理。特殊注意事项已用警告块标出,关键概念附设计原理链接供深度参考。

最后更新: 2025/8/26 10:07
Next
Configuration File