Bun v1.4.4 实战:用 bun fmt 替掉 prettier 的 5 个步骤

Bun v1.4.4内置了 bun fmt,一个与 Prettier 配置兼容的格式化工具。官方基准:Prettier 自己仓库 2,616 个文件,bun fmt 59.7 ms,Prettier 3.9.10 要 17.1 s。本文给出一条可回滚的迁移路径。

第 1 步:bun fmt --doctor 看兼容性

在项目根目录跑:

bash 复制代码
bun fmt --doctor

它会告诉你读的是哪份配置(.prettierrc / .oxfmtrc.json / .editorconfig / prettier.config.*),以及哪些包可以卸载。我搭的测试项目输出:

复制代码
Using .prettierrc (Prettier config)
You can remove: @trivago/prettier-plugin-sort-imports, prettier,
prettier-plugin-tailwindcss

Tailwind class 排序、package.json 排序、import 排序原来都是插件,现在内置。13,670 个真实 package.json 里,13,644 个与"Prettier 3.9.9 + 插件"输出字节级一致。

第 2 步:CI 里加 --check,别急着改默认命令

bash 复制代码
bun fmt --check   # 列出待格式化文件,退出码 1

先让它在 CI 里跑一周。全绿之前,本地照常用旧命令,避免大面积 diff 污染 review。

第 3 步:用 --staged 替掉 lint-staged

sh 复制代码
# .husky/pre-commit
#!/bin/sh
bun fmt --staged

--staged 格式化暂存区文件并重新 stage;--changed(或 --changed=origin/dev)只格式化与默认分支有差异的文件。

第 4 步:bunfig.toml 固化团队规范

toml 复制代码
[fmt]
printWidth = 100
semi = false
sortImports = true
sortTailwindcss = true
sortPackageJson = true

[[fmt.overrides]]
files = ["*.test.ts"]
options = { printWidth = 120 }

monorepo 里 bun fmt 从工作目录向上找最近的带 [fmt] 的 bunfig.toml。

第 5 步:确认无回退后卸载

一周内没有"改回 prettier"的 commit,就可以把 prettier、lint-staged、@trivago/prettier-plugin-sort-imports 之类移出 devDependencies。

受控实验与边界

三行烂格式代码实测:--check 报出文件,bun fmt 21.43 毫秒改完。date-fns 全仓(2,025 个文件,带 .oxfmtrc.json)第一遍 2,643 ms、第二遍 916 ms。

边界说清楚:Prettier 测试套件 9,731 个用例,bun fmt 过 99.1%;330 个开源仓库与 oxfmt 输出一致率 94.6%。有 4 处故意不同------CSS font-family: Font\ Awesome 这类会被 Prettier 改坏语义的写法,bun fmt 选择保留。用了 Prettier 私有插件的语言(如 Astro)会回退到项目内安装的 Prettier。

顺带:bun:sqlite 用户定义函数

同版本的 bun:sqlite 补上了 UDF,签名与 better-sqlite3 一致:

js 复制代码
db.function("add2", (a, b) => a + b);
db.query("SELECT add2(12, 4) AS sum").get(); // { sum: 16 }

db.aggregate("add_all", {
  start: 0,
  step: (total, value) => total + value,
});
db.query("SELECT add_all(dollars) AS total FROM expenses").get();
相关推荐
普通人66 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
浪遏13 小时前
recruitment-cli:让 AI 接手求职招聘,从架构到一次发送超时
架构·typescript·node.js
猫猫不是喵喵.1 天前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
律宏阔1 天前
微信小程序 + Taro 从 ESLint 迁移到 Oxlint 让项目代码检查速度提升近 12 倍
前端·typescript·eslint
瓦瓦gogo1 天前
从一个 TypeScript 函数开始理解 MCP 协议
linux·ubuntu·typescript
ZhengEnCi2 天前
Hono 4 多库多模型服务的企业级 Monorepo 目录结构:npm workspaces 与 Turborepo 该怎么分层
typescript
浪遏3 天前
从命令到工作流:juejin-cli 如何让写作自动化更可靠
typescript
浪遏3 天前
07|网页上看着正常,导出的 PDF 为什么还会变样
typescript
浪遏3 天前
03|自动保存真正难的部分,是保存期间又发生了修改
typescript
浪遏3 天前
04|同一篇资料,怎样同时交给编辑器、搜索和 AI
typescript