当前位置:
AIGC文章详情

别急着抛弃 Prettier:3.9 悄悄换了 4 个解析器,还修了一个静默失效的缓存 bug

源自45位全网作者

19:09

最近半年刷前端资讯,大概率见过这类标题:尤雨溪力推新格式化工具,“比 Prettier 快 45 倍”;又一个"Prettier 替代品"发布。看多了,真会有一种继续用 Prettier 就落伍了的错觉。

但今天不聊换不换工具,聊聊 Prettier 自己。这个 2017 年发布 1.0、陪前端走了九年的老工具,今年一点没闲着。最新的 3.9 发布两个月了,我把官方博客、changelog 和三个工具的发布记录都翻了一遍,先说结论:还在用 Prettier 的团队不用慌,但这次 3.9 的升级,有几个点值得你花五分钟知道。

一口气换了 4 个解析器

3.9 最硬的更新,是解析器大换血。

Markdown 解析器从老旧的 remark-parse v8 换成了 micromark v4,这个升级拖了好几年,换完之后 CommonMark 和 GFM 兼容性明显提升,顺带修掉一批陈年解析 bug。YAML 解析器升级到 yaml v2,同样解决了一堆老解析问题。GraphQL 完整支持了 GraphQL.js v17,fragment arguments 这类新写法在 3.8 里会直接报语法错误,现在能正常格式化了。Flow 则换上了 Flow 团队新发布的 Rust 解析器,官方本地基准测试里,解析有效 Flow fixture 的中位耗时从旧解析器的 422.6 毫秒降到了 266.4 毫秒。Prettier 官方博客等等,Rust 解析器?没看错。这其实是 Prettier 从 3.6 就开始推的"吸收"路线:2025 年年中,3.6 发布了两个官方插件——@prettier/plugin-oxc(基于 Rust 编写的 OXC 解析器)和 @prettier/plugin-hermes(Meta 的 Hermes 解析器),同时开放了 --experimental-cli 实验性高速命令行。到了 3.9,连 Flow 解析器也换成了 Rust 写的。Rust 浪潮不只是来掀 Prettier 桌子的,有一半被 Prettier 直接吸收成了自己的弹药。

还有个细节:3.6 的发布说明里专门感谢了 Biome,因为是 Biome 先发现了 Prettier 的一处格式不一致。Prettier 官方博客对手帮你找 bug,这氛围在前端工具圈不算常见。

编辑器生态这边也不用担心。以 WebStorm 为例,官方文档里 Prettier 到现在仍有独立的集成配置页,从包路径到运行模式都有专门设置项。JetBrains格式化这块蛋糕,Prettier 的基本盘还在。

别急着抛弃 Prettier:3.9 悄悄换了 4 个解析器,还修了一个静默失效的缓存 bug

两个坑、两个实惠、一条很多人不知道的规矩

升级之前,先看这几条。

一个坑:3.9 移除了对老版 import assertions 语法的支持,也就是 `assert { type: “json” }` 这种写法。Babel 8 也已经把它移除了,现行标准是 `with`。如果仓库里还有老写法,升级后格式化会报错,动手前先全局搜一遍。另一个要留意的是 MDX:这次换掉的是 Markdown 核心解析器,MDX 解析器的迁移还没完成,官方博客在公开征集贡献。Prettier 官方博客MDX 重度项目可以升级,但别期待 MDX 的格式化质量同步起飞。

两个实惠,都是闷声受益型。第一个是缓存:CLI 的 --cache-strategy content 选项之前其实是静默失效的——上游依赖 file-entry-cache v11 改了一个字段名,Prettier 还传旧名字,内容级缓存比对悄悄失效,退化成了只比文件大小。Prettier 官方博客如果你的 CI 里用了 --cache,3.9 把这个修好了,增量格式化是实打实变快的。第二个是 worktree 支持:`.git` 文件(注意不是目录)现在也会被视为项目根标记,在 git worktree 或 submodule 里格式化时,不会再误吃到上层目录的 EditorConfig。

还有一条官方博客每次发布都要念叨的规矩:安装或升级 Prettier 时,版本号要精确锁定,写 `“prettier”: “3.9.0”`,不要写 `^3.9.0`。Prettier 官方博客在 npm 世界里,这看起来像反模式,但这是 Prettier 的一贯立场:格式化输出本身就是用户可见的变更,任何小版本更新都可能改变换行行为。用了脱字符,你和同事装到的版本可能不一样,同一段代码格式化出两种结果,code review 里互相"修复"对方的格式,diff 越滚越乱。很多团队遇到的"格式化工具怎么突然抽风",最后查出来都是这一步埋的。顺带一提,如果用了 plugin-oxc 或 plugin-hermes,升级时记得一起升,不然新格式规则不会生效。不少 IDE 的状态栏小组件能直接看到当前运行的 Prettier 版本,比如 WebStorm 的 Prettier 状态弹窗会把版本号和运行状态摆在那里,升级前后瞄一眼,确认全组跑的是同一个版本,比事后查 diff 省事得多。

别急着抛弃 Prettier:3.9 悄悄换了 4 个解析器,还修了一个静默失效的缓存 bug

4.0 难产了吗?看发布记录说话

关心 Prettier 前途的人,真正想问的是:4.0 到底还来不来。

直接看 npm 的发布记录。Prettier 4.0.0-alpha.13 发布于 2025 年 11 月 18 日,到今天九个月过去,第十四个 alpha 还没露面。npm但 3.x 线一直没停:基本每三到六个月一个 minor,patch 按月出。3.9.0 是 6 月 27 日发布的,到 7 月 21 日已经打满六个补丁,更新到 3.9.6。

对面两家呢?Biome 保持每周一更的稳定节奏,8 月 21 日刚发了 2.5.10;oxfmt 也是每周一更,8 月 24 日发了 0.65.0——但注意,它 2 月就宣布 Beta 了,半年多过去仍是 0.x。npmnpm

所以真实局面不是"Prettier 躺平、挑战者狂奔",而是三家都在动,姿势不同。Prettier 大版本慢,从 3.6 的说明里倒是能看出 4.0 在憋什么:Hermes 会成为 Flow 的默认解析器、移除 babel-flow、新 CLI 转正。Prettier 官方博客再补一个背景信息:Prettier 从 2022 年起用 OpenCollective 的捐款给两位活跃维护者发固定补贴。Prettier 官方博客这个维护规模,决定了大版本的节奏——不是不想快,是人力就这么多。

那些"快 XX 倍"的标题,到底该怎么看

先说清楚口径。“快 45 倍"是尤雨溪去年 10 月为 oxfmt 预热时的说法,国内媒体广泛转载。知乎知乎今年 2 月 oxfmt 正式进入 Beta 时,官方口径变成了"在无缓存的首次运行中,比 Prettier 快 30 倍以上、比 Biome 快 3 倍”。Oxc 官方博客数字本身不假,但都带场景前提。

Oxc 官方维护着一个持续更新的基准测试仓库(测试对象就是 Prettier、Biome 和 oxfmt),当前版本跑的是 Prettier 3.9.6、Biome 2.5.6、Oxfmt 0.61.0,结果大致是:单个大文件(TypeScript 编译器的 parser.ts,约 540KB)场景下,Prettier 1.35 秒,换上 oxc 解析器插件后 0.75 秒,Biome 0.09 秒,oxfmt 0.12 秒——注意这个场景里 Biome 反而比 oxfmt 快。换到整仓场景(Outline 仓库,纯 JS/TS),Prettier 11.9 秒,oxfmt 0.49 秒,约 24 倍;内存占用 413.9MB 对 142.5MB。GitHub这组数据能读出两件事。第一,Prettier 的性能瓶颈不在解析器:换上 Rust 的 OXC 解析器也只拿回 20% 到 45%,真正的大头是它那套 JS 写的排版引擎——这也是 4.0 难产的根源,要根治得重写。第二,差距最刺眼的场景是 CI 全仓格式化、首次迁移这种"无缓存全量跑",日常在编辑器里只格式化改动文件,体感差距远没有标题那么大。当然也得提醒一句:这个基准仓库是 Oxc 团队自己维护的,属于主场作战,看数据时心里要有数。

oxfmt 这边的进展是真的:官方称已通过 100% 的 Prettier JS/TS 一致性测试,迁移是一条命令的事,vuejs/core、turborepo、sentry-javascript 这些知名仓库都已在用。Oxc 官方博客但"可用"和"1.0 稳定版"之间还隔着一段路,8 月底它还停在 0.65。

别急着抛弃 Prettier:3.9 悄悄换了 4 个解析器,还修了一个静默失效的缓存 bug

那到底该怎么办?三档建议

还在用 Prettier 的团队,我对号入座给三档。

直接升级的:JS/TS 为主、附带 Markdown、YAML、GraphQL 文档的项目,3.9 的实惠全在这些场景里。推荐姿势:精确锁定版本号,全局搜一遍老的 assert 导入写法,升级后跑一次全量 --write,然后把格式化改动单独提交——千万别混着业务改动一起提,不然 code review 没法看。

缓一缓的:MDX 重度项目(解析器还没换完);仓库里老 assert 写法很多、短期改不完的。

先试点的:CI 里全仓格式化要跑好几分钟的大仓库,可以在分支上试 --experimental-cli 或 plugin-oxc,但实验特性的输出不保证和稳定版完全一致,别急着全组铺开。

最后留三个观察信号:oxfmt 什么时候出 1.0、Prettier 4.0 什么时候 stable、plugin-oxc 什么时候转正成默认解析器。这三个信号亮起来之前,"该不该逃离 Prettier"这个问题,对大多数团队的答案是:不用急,先把 3.9 的红利吃到手。

你们团队现在用的 Prettier 是什么版本?升级的时候踩过什么坑?评论区聊聊。

内容由AI生成
0
扫一下,分享更方便,购买更轻松
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

最新文章 热门文章