Bun 入门指南:写给 Node.js 开发者
Bun 是瞄准"直接替代 Node.js"的现代运行时:npm 兼容包管理、原生 TypeScript、内置测试运行器。本文讲解 Bun 的工具链、Node 兼容性与性能真相。
Bun 是基于 JavaScriptCore 引擎的一体化 JavaScript 运行时:运行时 + 包管理器 + 打包器 + 测试运行器四合一,bun install 比 npm 快一个数量级,TS 文件直接 bun run 无需编译。与 Node.js 高度兼容但并非 100%,新项目可大胆采用,存量项目按兼容性测试渐进迁移。
Bun 是什么
Node.js 用 V8,Bun 用 Safari 的 JavaScriptCore,再配一套 Zig 写的底层系统调用——这是性能差异的来源。但 Bun 真正的野心是工具链一体化:装一个 Bun,替代 node + npm/yarn + tsc/tsx + jest + esbuild 的组合。
curl -fsSL https://bun.sh/install | bash
bun --version
工具链四合一
bun init # 初始化项目
bun install # 装依赖(兼容 package.json 与 npm 仓库,速度极快)
bun add lodash # 加依赖
bun run index.ts # 直接跑 TypeScript,无需任何配置
bun test # 内置测试运行器(Jest 兼容 API)
bun build ./src/index.ts --outdir dist # 打包
TypeScript 与配置
Bun 原生执行 TypeScript——不需要 tsc、tsx 或 loader。注意它是"类型剥离"而非"类型检查":类型错误要用 tsc --noEmit 或编辑器提示把关。
bunfig.toml 配置文件控制行为:
[test]
coverage = true
[install]
exact = true
标准库与 Web API
Bun 的内置模块覆盖面惊人:Bun.serve() 起 HTTP 服务器(性能顶级)、Bun.file() 文件操作、Bun.SQL 数据库客户端、Bun.password 密码哈希。同时优先实现 Web 标准 API(fetch、ReadableStream、WebSocket),代码在浏览器与服务器间的可移植性好于 Node 专有 API。
Node.js 兼容性的真实水位
核心 API(fs、path、http、Buffer、process)兼容良好;node_modules 生态大部分直接可用。已知缝隙:部分依赖 Node 内部实现的包(node-gyp 原生模块的边角场景)、个别 Node 较新 API 的实现进度。迁移前先跑测试套件验证。
性能与采用决策
启动速度、安装速度、HTTP 吞吐的基准测试 Bun 全面领先。但生产选型不只看跑分:Node.js 的 LTS 支持、生态成熟度、企业采用广度仍是压舱石。
决策框架:个人项目/CLI 工具/Serverless 函数——放心用 Bun(快且爽);中大型生产服务——评估兼容性后灰度试点,或在 CI/构建环节先用 Bun 提速(bun install 替代 npm ci 立竿见影)。
常见问题(FAQ)
Q:Bun 能直接运行现有 Node.js 项目吗?
多数可以:bun install 装依赖后 bun run 启动。建议在 CI 中加一条 Bun 环境的测试流水线,验证通过再谈切换。
Q:Bun 的包管理和 npm 完全兼容吗?
读取 package.json、装 npm 仓库的包、生成 bun.lock 锁文件。npm 的 node_modules 布局兼容,工作区(workspaces)也支持。个别依赖 npm 生命周期脚本特殊行为的包需要验证。
Q:Deno 和 Bun 选哪个?
Deno 主打安全模型与 Web 标准纯粹性,Bun 主打性能与 npm 兼容。已有 npm 生态资产选 Bun 过渡更平滑;全新全栈 TS 项目两者都值得评估。
参考文档
本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。