Skip to content
雲里
里雾

Prettier 🌱 Seed

开发

aka: Opinionated Formatter, 有观点的格式化

Content


Prettier 是一种意见强烈的代码格式化工具,目标不是提供无限可配的风格选项,而是通过统一格式减少关于排版的争论。它在前端生态中的意义,更多是把“代码长什么样”从主观偏好中抽离出来,让团队把注意力放回逻辑和结构。

Acceptance

Prettier 是一个”有观点的”(opinionated)代码格式化器。它的核心设计决策:

工作方式: 解析代码为 AST丢弃所有原始格式(空格/换行/缩进) → 从 AST 重新打印(pretty-print)。不是”微调你的格式”,而是”完全重写你的格式”。

选项极少的设计哲学: 创始人 James Long 的核心论点:关于代码格式的争论(tab vs space, 分号 vs 无分号)浪费了太多团队时间。Prettier 的解决方案不是”提供更多选项让你选”,而是”尽量不给你选,用我的默认值,别争了”。

Prettier 只管格式,不管语义: const x = 1 + 2const x = 3 语义不同但 Prettier 不关心——它只管这行代码的缩进、空格、换行应该长什么样。

Question

  • Prettier 的”丢弃原格式重新打印”策略意味着什么?是否存在 Prettier 格式化后代码语义变化的边界案例?
  • “有观点的”工具设计哲学(减少选项)和”可配置的”工具设计哲学(提供灵活性)各自适合什么场景?
  • 如果 Biome 完全替代了 Prettier,Prettier 的”有观点”哲学是否也被继承了?

See Also

  • AST

  • ESLint

  • Biome

  • MindGym M0 session (2026-04-13) — tsc/ESLint/Prettier/Biome 的三维度讲解

  • James Long, “A Prettier Printer” (2017) — Prettier 的原始设计文档

  • Prettier 官方文档:option philosophy / rationale

  • Biome 官方文档:formatter philosophy

YoYo’s Note

Prettier 最反直觉的地方:它解析成 AST 后完全丢弃你的格式,然后重新生成。这意味着两个格式完全不同的文件,经过 Prettier 后输出完全一样——因为 AST 一样,输出就一样。这就是为什么它能终结格式争论:不管你怎么写,最终结果都是 Prettier 决定的。

它和 ESLint 的冲突是前端工具链最经典的”架构债”——两个工具的职责边界在”格式”这个维度上重叠,需要第三个包(eslint-config-prettier)来调停。Biome 通过”一个工具做两件事”从根本上消除了这个问题。

Answer

Prettier 的”丢弃原格式重新打印”策略意味着什么?是否存在 Prettier 格式化后代码语义变化的边界案例?

这意味着 Prettier 不会尊重你原来排版中的“个人意图”,而是把代码当成结构化语法对象重新输出。理论上它的目标是不改变语义,但在 parser 支持边界、ASI(自动插入分号)敏感写法或语法歧义场景中,仍然需要额外留意。所以 Prettier 的前提是“先能被正确解析”,而不是“任何文本都能安全重排”。

“有观点的”工具设计哲学(减少选项)和”可配置的”工具设计哲学(提供灵活性)各自适合什么场景?

有观点的工具适合团队协作、低争议、高一致性场景,因为它能快速消灭讨论成本。可配置的工具更适合复杂遗留系统、框架差异大、团队规范独特的场景,因为你需要更精细地适配现实。两者没有绝对高下,本质是“统一效率”与“局部控制”之间的取舍。

如果 Biome 完全替代了 Prettier,Prettier 的”有观点”哲学是否也被继承了?

在很大程度上会被继承。因为 Biome 之所以能替代 Prettier,前提之一就是它也提供一套尽量少选项、强调一致输出的格式化哲学。如果一个替代品重新变回高度可配置的 formatter,它就很难继承 Prettier 真正的价值。

分享这张卡片:
分享到 X

Prettier

#Prettier #代码格式化

反向链接