开头的话
先说一个最近让前端圈炸锅的消息——Bun 被 Anthropic 收购了。对,就是那个做出了 Claude 的 Anthropic。他们买 Bun 干嘛?给 Claude Code 当底层运行时。
这事听起来挺离谱的,一个 AI 公司去买一个 JS 运行时干嘛?但仔细一想就通了:Claude Code 每天要跑海量的 JS/TS 代码,对启动速度、执行效率的要求比一般 Web 应用高得多。Node 当然能跑,但在这种场景下,Bun 的优势就被放大了。
Bun 到底是个啥
简单说,Bun 就是一个能替代 Node.js 的东西,但它不只是运行时,还自带包管理器和打包工具。
用 Node 的时候你会发现一个很烦的事情:装包用 npm,跑代码用 node,配置 TypeScript 还得单独折腾 tsconfig 和一堆 loader。每个环节都需要额外折腾。
Bun 把这些全揉一块了。装好 Bun,TypeScript 直接就能跑,不需要你配任何东西。bun install 比你用过的任何包管理器都快一个量级,bun run 启动项目几乎感觉不到延迟。
说到底,Bun 跟 Node 做的事情一样,但它是从零开始重新设计的,没有 Node 十几年积累下来的历史包袱。底层用 Zig 写的,JavaScriptCore 引擎(就是 Safari 那个)替代了 V8。这两点让它比 Node 快得不是一星半点。
插一句 TypeScript
聊 Bun 绕不开 TypeScript,因为 Bun 对 TS 的支持是刻在骨子里的。
TypeScript 是微软搞的,本质就是 JavaScript 加上类型系统。Typescript 是 js 的超集——所有合法的 JS 代码本身就是合法的 TS 代码。它多出来的那部分,就是类型。
TS 做的事情不复杂:你写代码的时候给变量、参数、返回值标上类型,它在你编译的时候帮你检查有没有类型错误。检查完没问题了,就把类型全擦掉,生成干净的 JS。
这听起来好像没啥大用,但写过大型项目的人都知道,类型系统救命的时候多了去了。
JavaScript 的那些坑
JS 是弱类型语言,写起来很爽,出 bug 也很爽。
说几个最常见的场景。
第一个,浏览器里的输入框。你写了个 input,用户输了数字,你理所当然觉得拿到的是 number,该计算计算。但实际上 input.value 永远是字符串。你说你当然知道这个知识点——但凌晨三点赶需求的时候你就忘了,然后线上报了一堆 NaN。
<input type="text" id="ipt">
<script>
const ipt = document.getElementById("ipt");
ipt.addEventListener("change", function(event) {
console.log(event.target.value); // 永远是字符串,不是数字
})
</script>
第二个,+ 号的双重人格。+ 在 JS 里既做加法又做字符串拼接,它选哪个完全看操作数类型。你写着写着,一个数字和一个字符串凑一块了,它也不报错,默默给你拼了个字符串出来,然后这个字符串传到后面又参与了别的运算,最后结果歪到天边去了。
function add(a: number, b: number): number {
return a + b;
}
let a = 1;
let b = "2";
// add(a, b); // TS 直接报错拦住你,根本不给犯错的机会
let c: number = add(a, Number(b)); // 必须显式转换
这种 bug 最恶心的地方在于它不报错。JS 的弱类型哲学是"能跑就行",类型不对它自己想办法给你隐式转换。小项目还好,几十万行代码的大项目,这种隐式转换引发的 bug 可能在系统里潜伏几个月才被发现。
TypeScript 就是在代码跑起来之前帮你把这些雷排掉。
为什么说 TS 已经是 AI Agent 时代的标配了
现在做 AI Agent 开发,TypeScript 基本是默认选择了。
AI 生成的代码量跟人写的不是一个级别。一个 Agent 一天能吐出几百个文件,这些代码要是没有类型检查直接进项目,维护成本会高到完全不可接受。
类型系统在这里扮演的角色不是"帮你写代码",而是"帮你守住底线"。AI 写的代码可能会有各种奇奇怪怪的类型问题,TS 编译器就是一道自动化的质量关卡。
而且现在主流 AI 编程工具的底层都在用 Bun,原因前面说了——启动快、TS 原生支持、零配置。AI 调用工具的时候不可能等你装半天依赖再跑,Bun 的毫秒级启动在这种场景下就是硬需求。
这大概也是 Anthropic 收购 Bun 的核心逻辑。
装一个试试
Windows 上装 Bun 很简单,打开 PowerShell 跑一行:
powershell -c "irm bun.sh/install/windows | iex"
装完之后你就能用 bun init 初始化项目,用 bun install 装包,用 bun run 跑代码了。不需要单独装 Node,不需要配置任何东西,TypeScript 文件拖进来直接跑。
bun init # 初始化一个新项目
bun install # 安装依赖,速度碾压 npm
bun run index.ts # 直接跑 TS 文件,不需要 ts-node
总结
Bun 不是"又一个 JS 运行时",它是对 Node 生态一次认真的重新思考。Node 很棒,它让 JS 脱离了浏览器的牢笼。但十几年过去了,很多东西可以做得更好——启动速度、TS 支持、包管理、开发者体验,Bun 在每个环节都给出了更优的解。
而 TypeScript 也不再是可选的"要不要学"了。在 AI 辅助开发越来越普及的当下,类型系统已经从"锦上添花"变成了"必要防线"。如果你还在纯 JS 栈上写稍大一点的项目,是时候切到 TS 了。
至于 Bun + TypeScript 这对组合,用一个装了 Bun 的开发来说就是:装完那一刻就能写代码,这种感觉,Node 生态给不了你。