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();