Bun 深度调研:一个想把 JavaScript 工具链全部重写的野心项目

大家好,我是若风。

2025 年 12 月上旬,Bun 先宣布加入 Anthropic,随后 Anthropic 也发布公告:它收购了 Bun。

我也注意到,Bun 官方在加入 Anthropic 的文章里提到 Claude Code、Factory AI、OpenCode 等 AI 编程工具都在使用 Bun。换句话说,它已经不只是一个"开发者自己试试看"的运行时,也开始进入 AI coding 工具链的内部执行路径。

这 2 件事情叠加引起了我对 Bun 的好奇,说实话,我之前对 Bun 的印象一直停留在"又一个号称比 Node 快的 JS 运行时"这个层面。但这次收购让我觉得事情没那么简单------Anthropic 为什么要收一个 JavaScript 运行时?

带着这个疑问,我花了不少时间做了一次深度调研。越看越觉得,Bun 这个项目比我想象的有意思得多。它不只是"比 Node 快",它其实在试图重新回答一个问题:现代 JavaScript 工程,到底应该由几层工具组成?

今天这篇文章,就是这次调研的结果。

先说结论

Bun 不是 React、Vue 那种"框架",而是一个试图把 JavaScript 运行时、包管理器、测试运行器、Bundler、全栈开发服务器 压进同一个二进制里的基础设施产品。

用人话说:Bun 想把 "Node.js + npm/pnpm + Jest/Vitest + esbuild/Vite" 这一大串组合拳,收缩成一个叫 bun 的命令。

这个野心非常大。大到现在社区对 Bun 的态度非常分裂:一边是兴奋,因为确实快;另一边是警惕,因为边界扩得太宽,质量能不能跟上是个问号。

Bun 怎么来的:一次"忍不了"

Bun 的起点不是抽象的"想做一个更快的 JS 运行时",而是非常具体的工程烦躁。

创建者 Jarred Sumner 在多次访谈和项目回顾里都把 Bun 的起点讲得很工程化:他当年在做一个浏览器里的 voxel game,代码库一大,开发服务器反馈变得难以忍受。InfoWorld 访谈里提到,从保存代码到浏览器看到变化大概要 30 秒;后来的复盘文章里也常把这个痛点描述成几十秒级的等待。不是哲学问题,是会把人耐心一点点磨掉的那种工程问题。

于是他先去折腾 JSX/TypeScript 转译器,后来为了让 Next.js 的服务端渲染跑起来,发现自己又不可避免地走进了 runtime 的坑里。

很多产品的诞生,表面上是"新需求催生新架构",实际上更像"一个足够能折腾的人,被一个具体痛点逼进了深水区"。Bun 就是后者。

两个关键选择,决定了 Bun 的一切

Bun 在 2021 年做了两个技术选择,几乎锁死了它后来所有的优点和缺点。

选择一:用 Zig,不是 Rust

Jarred 说他一开始也考虑过 Rust,但最后选了 Zig。理由不是"生态更好",而是更朴素的------他要对底层行为、内存和系统调用路径有足够直接的控制。

Bun 从第一天起就是一个极度强调性能路径的产品。语言选择不是外围决策,它会把团队的心智模型也一起定型。

选择二:JavaScriptCore,不是 V8

这一步影响更大。Node 和 Deno 背后都是 V8,Bun 反而绕到 Safari 那条线,嵌入 WebKit 的 JavaScriptCore。

为什么?因为 JavaScriptCore 的启动速度快。

这个选择给了 Bun 很强的启动速度优势,也让它从第一天就和 Node/Deno 拉开了技术路线差异。但代价也很明显:在 Node 兼容、V8 私有 C++ API、Windows 适配这几个方向,Bun 注定要比"直接站在 V8 上做演化"的路线更辛苦。

也就是说,Bun 后来的很多优点和很多麻烦,其实在 2021 年这两个选择里就已经埋下了。

Bun 的版本演化:从"能跑 demo"到"被 Anthropic 收购"

Bun 到今天大致经历了四个阶段,每个阶段的核心矛盾都不一样。

第一阶段:萌芽期(2021-2022.7)

核心矛盾:如何把对 JavaScript 工具链低效的个人愤怒,变成一个技术上可成立的新产品。

最关键的决策就是 Zig 和 JavaScriptCore。

第二阶段:品牌爆发期(2022.7-2023.9)

2022 年 7 月,Bun v0.1.0 发布后迅速出圈。早期社区买单的不是成熟度,而是三件事:

第一,统一叙事。 Node 时代的 JS 工具栈越来越像乐高------runtime 是 Node,包管理是 npm/yarn/pnpm,转译是 Babel/SWC/tsx,测试是 Jest/Vitest,打包是 webpack/esbuild/rollup/Vite。每多一层,就多一层配置、多一层 cache、多一层边界 bug。Bun 一上来就反着来:别拼了,我给你一个总工具。

第二,速度叙事足够强。 无论是早期官网还是后来的首页,Bun 一直把"快"放在最前面。启动快、HTTP 快、WebSocket 快、bun install 快、bun test 快。

第三,兼容策略更现实。 Deno 早期更像"重写现代 JS 运行环境"的宣言,理念漂亮但迁移成本高。Bun 从一开始就瞄准"Node 的替代者",不是"Node 的批评者"。它不是要教育开发者换脑子,而是想让开发者带着旧项目直接试。

这件事非常重要。因为在运行时竞争里,迁移成本比理论优雅更接近真实决策。

第三阶段:平台化与兼容攻坚期(2023.9-2025.10)

Bun 1.0(2023.9.8):第一次完成产品定义

Bun 1.0 不只是版本号从 0.x 跨到 1.0。真正重要的是,它第一次把产品定义讲完整了:明确列出想要替代 Node.js、npx、dotenv、nodemon、babel、ts-node、esbuild、webpack、npm、yarn、pnpm、Jest、Vitest。

它讲的不只是性能,而是一个完整的开发路径。

这背后是一种很强的产品哲学:不是让你装更多工具去修 JavaScript,而是让 runtime 本身长出更多"开发者真正高频会用"的器官。

Bun 1.1(2024.4.1):补上 Windows,从明星项目走向平台项目

Windows 支持看起来不性感,但它决定你到底能不能被更大盘子的开发者采用。Bun 1.1 发布文里说,Bun on Windows 已经可以通过 Bun 在 macOS 和 Linux 上自用测试套件的 98%。

这一步的意义在于:你不再只是给愿意折腾的新技术爱好者服务,你开始对更多普通开发者负责。对基础设施产品来说,这是从"项目"走向"平台"的必要一步。

Bun 1.2(2025.1.22):方法论升级

很多人看 Bun 1.2,会先看到新增能力:Bun.s3Bun.sqlbun.lock 文本锁文件。

但我觉得真正的分水岭在于它对 Node.js 兼容性的方法论升级 。过去 Bun 修 Node 兼容,更多是哪个 npm 包炸了就去补哪个坑------像打地鼠。Bun 1.2 开始系统性地跑 Node.js 官方测试套件

这意味着 Bun 承认了一件事:如果你真想吃掉 Node 的运行时地位,最重要的战场不是宣传页,而是兼容性回归测试。

这是 Bun 从"产品想象力很强"走向"工程纪律正在成形"的关键一步。

Bun 1.3(2025.10.10):从 runtime 推向 full-stack substrate

官方原话:Bun 1.3 turns Bun into a batteries-included full-stack JavaScript runtime.

新增了内建前端 dev server、内建热重载、可以直接跑 HTML、更强的 Bun.serve() 路由、MySQL 和 Redis 也进来了。

到 1.3 为止,Bun 已经不再只想做"更快的 Node 替代品"。它想做的是:你用一门语言,一套命令,一个二进制,直接把前端开发、后端服务、测试、打包、依赖管理、甚至一部分数据库接入都串起来。

第四阶段:AI 基础设施绑定期(2025.12 至今)

被 Anthropic 收购

2025 年 12 月 2 日,Bun 宣布加入 Anthropic。Jarred 在公告里说得很坦白:截至公告发布时,Bun 收入是 0。

这很真实。Bun 过去默认的商业化设想大概是做某种云托管产品,但 AI coding tools 在 2024 年后突然变成更大的浪潮。Bun 团队判断,把自己放到 Anthropic 体系里,成为 Claude Code、Claude Agent SDK 和未来 AI coding 产品的基础设施层,比继续摸索独立 startup 如何变现更有意思。

这里有一个非常值得注意的转向:Bun 最早是因为前端热重载慢而生,最初服务的是"人类开发者更快写代码"。到了 2025 年底,新叙事变成:AI agents 正在写、测、跑更多代码,所以 runtime 和工具链层的重要性反而更高。

这不是换包装,是战略重心真的变了。

2026 年:继续打磨底层

截至 2026 年 5 月 6 日,我查到的 Bun 最新稳定版是 v1.3.13。这些 1.3.x 小版本说明 Bun 已经进入更像基础设施产品的第二阶段:围绕真实工作负载,打磨测试、安装、内存、兼容这些又难讲故事、又极其影响体感的底层路径。

比如 1.3.13 里:bun test --parallel--isolate--shard--changedbun install 流式解压 tarball,官方称在大仓库里把内存压到之前的 1/17;source map 内存占用最多下降 8 倍;runtime 基线内存再降约 5%。

竞争格局:Bun vs Node vs Deno

Bun 的竞品不是一个,至少有三类对手:Node.js(默认标准)、Deno(方法论型对手)、传统 Node 工具链组合(最真实的日常对手)。

Bun vs Node.js

Node 的价值不是"每一项都最好",而是"它在无数真实生产环境里被证明足够稳,而且生态默认围着它转"。Node 自己不试图把整个工具链都吃下来,它把 runtime 做成公共地基,然后允许上层生态自由长。

Bun 则更激进。它不满足于做 runtime,它想把"你平时围绕 runtime 装的一整套常用工具"一起卷进来。

Bun 赢在:集成度极高、启动快反馈快(对 CLI 和 AI agent 特别友好)、产品表达更现代。

Bun 输在:稳定性和边缘兼容还没到 Node 那个量级、维护面过宽、生产可预期性仍然弱于 Node。

用户的真实选择逻辑通常是:

  • 选 Bun:新项目、内部工具、CLI、AI agent,迁移包袱小,想少装几层工具
  • 选 Node:老项目依赖深,团队更看重稳定性,生产事故成本远大于日常快一点的收益

Bun vs Deno

两者经常被放在一起,但方法论差很大。

Deno 的路线 :先把原则立住,再向现实靠近。secure by default,Web 标准优先,TypeScript 零配置。Deno 2 的现实转向很明显:官方发布文明确提到支持 package.jsonnode_modules、npm 和更强的 Node 兼容。

Bun 的路线:先吃现实,再慢慢补原则。从第一天就强调"drop-in replacement for Node.js",优先考虑的不是权限模型的美感,而是"老项目能不能尽快跑"。

三条路径,三种气质:

  • Node 是默认公路
  • Deno 是重新规划过交通规则的新城
  • Bun 是一条想直接把老城最堵那几段全改成高速路的工程

Bun vs 传统工具链

这才是最真实的竞争。很多团队不会问"要不要从 Node 换到 Bun",而是问:现有这套 Node + pnpm + Vite + Vitest 的组合,有没有必要整体迁到 Bun?

传统组合的优点是每一层都相对成熟,并且可以替换。缺点是你得自己承担拼装成本------不同工具会反复解析源码、反复做模块图、反复维护 cache。

Bun 赢在减少重复工作、配置面收缩、局部采用路径很丝滑(你可以先只用 bun install)。

Bun 输在传统组合的每个局部都更成熟,专业化工具在极端场景下仍然更强,而且很多成熟团队不喜欢"一个核心工具管太多事"。

Bun 的优势和劣势,都来自同一个源头

Bun 最让人着迷的地方,和最让人不放心的地方,其实是一回事。

它的核心优势来自一个很稳定的价值排序:凡是会拖慢开发者反馈回路的环节,都值得被系统性重做。 安装更快、启动更快、TypeScript/JSX 不用额外转、测试和打包都不绕远路、CLI 分发成本更低。

但正因为不是只做 runtime,而是一路把更多高频能力往 core 里收------包管理器、测试运行器、Bundler、dev server、数据库客户端、对象存储客户端------维护半径不断扩大。任何一个面出问题,都会牵连整个品牌。

GitHub 上能看到非常具体的担忧。有用户在用 Elysia.js + Prisma 的 API 服务里观察到 CPU 持续上升;也有用户把同一套服务从 Node 切到 Bun 后,在 GKE 上内存从 500MB 很快打到 1.2GB 容器上限。这些都是单个 issue 案例,不等于 Bun 在所有生产场景都有同样问题,但它们确实说明:社区对稳定性和边缘兼容的担心并不是凭空来的。

这些声音代表了 Bun 当前最真实的舆论断层:在开发体验层,很多人已经觉得它很香;在关键生产基础设施层,很多人还没有放心。

未来会怎样?

我觉得有三种剧本。

最可能:外围切入,向中心渗透

Bun 会继续成为 AI-native JavaScript 工具链和 CLI 分发的重要基础设施。很多团队会先用 bun installbun test、可执行程序编译、内部脚本,再慢慢决定要不要让核心服务也切到 Bun。

最危险:功能扩张但质量跟不上

功能继续高速扩张,但质量治理跟不上,导致 Bun 在生产后端场景里长期背着"不够稳"的标签。最后更多停留在"很好用的开发工具/CLI 基座",而不是全面替代 Node 的基础设施。

最乐观:AI 时代的默认 JS 执行层

Anthropic 的资源、AI coding tool 的真实需求、Bun 团队对性能和 DX 的持续偏执,最终叠加成一个结果:Bun 在 2 到 3 年里把 Node 兼容和稳定性再往前推一个台阶,成为 AI 时代默认的 JavaScript 执行与分发层。

写在最后

回头看看 Bun 的发展历程,有一个感受很深。

Node 代表的是"runtime 做小,生态做大"。Deno 代表的是"先把原则立住,再兼容现实"。Bun 代表的是"把最影响效率的几层工具重新焊成一个整体,并且优先服务真实迁移路径和更短的反馈回路"。

所以 Bun 最核心的竞争力,从来不只是快。而是它在试图把"现代 JavaScript 工程到底应该由几层工具组成"这个问题,重新回答一遍。

这就是它值得被认真研究的地方。也是它注定会继续伴随争议的原因。

对于普通开发者,我的建议是:

如果你在做新项目、CLI 工具、内部工具、AI agent 相关的东西,Bun 值得认真试试。你可以先只用 bun installbun test,先吃到局部收益,不需要一步到位。

如果你在维护大型生产系统,继续用 Node 是更安全的选择。Bun 还没到可以放心把核心服务压上去的阶段。

但不管你用不用 Bun,它正在改变 JavaScript 工具链的游戏规则。这件事本身就很值得关注。

参考来源

相关推荐
甲维斯3 小时前
这一波MiMo2.5pro被DeepSeek V4 完虐了!
ai编程
Mac的实验室4 小时前
ChatGPT 突然要验证手机号?2026年登陆注册Codex解决手机号码验证的问题(附最新图文教程解决办法)
ai编程
Mac的实验室4 小时前
2026 最新 Codex 手机号验证教程:国内如何解决 ChatGPT 手机号验证问题
ai编程
Mac的实验室4 小时前
2026年Codex如何解决手机号码登陆验证的问题?
ai编程
Irissgwe4 小时前
LangChain之核心组件(输出解析器)
ai·langchain·llm·ai编程·输出解析器
Mac的实验室4 小时前
为什么用chatgpt账号登入一直提示需要电话号码, 要验证手机号怎么解决?
ai编程
沐泽__5 小时前
自注意力机制含义
ai编程
沐泽__5 小时前
Skill 如何实现(通用思路,可直接用)含义
ai编程
掘金酱6 小时前
📱 TRAE SOLO 移动端上线征文|“我的第一次移动端AI办公” 评测,赢机械键盘礼包+10w矿石!
openai·ai编程·trae