Oxfmt:Oxc 格式化工具的首个 Alpha 版本
我们很高兴宣布推出 Oxfmt,这是一款基于 Rust、兼容 Prettier 的代码格式化工具。此首个版本专注于 JavaScript 与 TypeScript,后续将逐步支持更多语言。
Oxfmt 设计目标如下:
- 性能:首次运行时比 Prettier 快超过 30 倍,比基于 Rust 的 Biome 快超过 3 倍 (基准测试)。
- 兼容性:完全兼容 Prettier,可轻松在现有项目中采用。
- 开发者体验:即将推出的特性包括导入排序、扩展格式化选项,以及对 Prettier 插件的支持。
快速开始
将 oxfmt 添加到你的项目中:
npm add -D oxfmt@latestpnpm add -D oxfmt@latestyarn add -D oxfmt@latestbun add -D oxfmt@latestdeno add -D npm:oxfmt@latestOxfmt 遵循 Prettier 的配置格式。如果你正在使用带有 JSON 配置文件的 Prettier,可以将其重命名为 .oxfmtrc.jsonc:
cp .prettierrc.json .oxfmtrc.jsonc你也可以从以下 .oxfmtrc.jsonc 配置示例开始:
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
// 从 Prettier 迁移时使用 80;100 是 Oxfmt 的默认值!
"printWidth": 80,
"ignorePatterns": [] // 与 `.prettierignore` 相同
}接下来,在 package.json 的 scripts 中添加 oxfmt:
"scripts": {
"format": "oxfmt"
}或者参考 安装指南 获取详细说明。
性能
Oxfmt 极其高效。我们在 Outline 仓库上的基准测试结果表明:
- 比无缓存的 Prettier 实验性 CLI 快超过 30 倍
- 比通过
@prettier/plugin-oxc使用 Oxc 解析器的 Prettier 快超过 20 倍 - 比另一款基于 Rust 的格式化工具 Biome 快超过 3 倍
有关详细的基准测试设置,请参阅以下仓库:
oxc-project/bench-formatter
https://github.com/oxc-project/bench-formatter
设计
Oxc 团队优先考虑与现有生态系统的兼容性,使迁移过程变得简单,即使对于大型代码库也是如此。
代码格式化结果
Oxfmt 的 JavaScript 格式化结果与 Prettier 完全一致。如果你今天开始迁移到 Oxfmt,不应发现与 Prettier 的格式差异。
当你从较旧版本的 Prettier 进行迁移时,可能会看到一些细微差别(查看迁移示例),因为我们识别出 Prettier 在某些格式化方面仍有改进空间。我们已与 Prettier 团队积极协作,直接提交漏洞报告和补丁请求。其中许多改进已合并至最近发布的 Prettier 3.7 版本中。
目前,Oxfmt 已通过了 Prettier 约 95% 的 JavaScript 与 TypeScript 测试用例,我们希望未来能与 Prettier 团队共同推动格式化行为趋于一致。
默认 printWidth: 100
我们选择将默认行宽设为 100,而非 Prettier 的 80。原因包括:
- TypeScript 代码通常比 JavaScript 更长,因为含有类型注解。
- 导入语句经常包含多个项。
- 更大的屏幕提供了更多的横向空间。
- 可略微减少大模型(LLM)所需的标记数量。
虽然 Oxfmt 保持与 Prettier 的兼容性,但默认行宽为 100 个字符。若想避免从 Prettier 迁移时产生较大的变更差异,可显式将行宽设为 80。
ignorePatterns
尽管 Oxfmt 支持 .prettierignore,还额外提供了 ignorePatterns 配置选项,以便将所有配置集中于一个文件中。
配置
Prettier 的 JSON 配置文件与 Oxfmt 兼容。最简单的迁移方式如下:
cp .prettierrc.json .oxfmtrc.jsonc如果你的编辑器支持 JSON 语言服务器,可在将 oxfmt 添加到 devDependencies 后,使用以下最小模板作为起点:
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"ignorePatterns": []
}尽管当前 Alpha 版本尚未支持所有 Prettier 配置选项,但我们已支持以下主要选项:printWidth、tabWidth、useTabs、semi、singleQuote、quoteProps、jsxSingleQuote、trailingComma、bracketSpacing、objectWrap、bracketSameLine、arrowParens、endOfLine,以及 singleAttributePerLine。
完整选项列表请参阅我们的 文档。
终端输出
Oxfmt 的默认行为等价于 prettier . --write,提供与 cargo fmt 相同的用户体验,并且不输出任何内容。你可以使用 --check 来显示格式化差异,并在 CI 流水线中强制执行 Oxfmt 的使用。
Beta 版本计划
以下是我们的 Beta 版本规划:
- 支持更多文件格式 —— 如
.json文件 - 支持嵌入式语言格式化 —— 如在 JS 中的 CSS 或 GraphQL
- 内置排序与美学功能,如 导入排序
- Prettier 插件支持
- Oxfmt 的 Node.js API
- 禁用文件末尾的换行符
--migrate prettier- ……以及你的功能建议
你可以在此处追踪我们向 Beta 版本推进的进度:
Formatter Beta · Milestone #15 · oxc-project/oxc
https://github.com/oxc-project/oxc/milestone/15
我们还计划在未来版本中放宽部分格式化规范。
下一步
请参阅 Oxfmt 文档 中的完整安装指南。
报告问题
如遇格式差异,请参考 https://github.com/oxc-project/oxc/discussions/14669。
此外,已知问题会通过 标签 区分。
若发现其他问题,请使用 专用模板 在 GitHub 上创建新问题。
加入社区
RFC: Formatter · oxc-project/oxc · Discussion #13608
https://github.com/oxc-project/oxc/discussions/13608
我们诚挚欢迎你的反馈,帮助 Oxfmt 变得更出色!
致谢
Oxfmt 基于 biome_formatter 的一个分支实现,我们感谢 Biome 团队,尤其是 @ematipico 与 @MichaReiser。我们也感谢 Prettier 团队及 @fisker 在格式化兼容性方面的合作。



