📌 项目地址:oven-sh/bun | ⭐ 91,814 颗星 | 🔧 Rust | 📜 未标注
一个二进制替代四个工具
Node.js 生态长期存在的问题:跑脚本需要 node,装包需要 npm(或 pnpm/yarn),跑测试需要 jest/vitest,执行一次性包需要 npx。每个工具都有自己的启动开销和安装体积。Bun 把这四个角色合并成一个可执行文件 bun,底层引擎换成 JavaScriptCore(Safari 用的那个),而不是 V8。
这不是简单的打包——Bun 的运行时、包管理器和测试运行器都是重新实现的,用 Zig 写的。根据 README 描述,启动速度和内存占用比 Node.js 有明显优势。虽然 README 没给出具体基准数字,但 JavaScriptCore 本身对短生命周期脚本的启动优化比 V8 激进,加上 Zig 编译出的二进制体积更小,理论优势是成立的。
五个核心命令,覆盖日常
所有命令都来自 README,我逐一拆解它们替代了什么:
bun run index.tsx:直接执行 TypeScript/JSX,不需要 ts-node、esbuild 或 babel 预处理。Node.js 需要npx ts-node index.tsx或先编译。Bun 开箱支持 TS 和 JSX,对小型原型开发和 CLI 脚本很友好。bun test:内置测试运行器,能用describe/it这类常见 API。如果你现有项目用的是mocha或vitest,迁移成本取决于 API 覆盖范围。Jest 用户需要注意:Bun 没有实现 Jest 的全部 mock 和 spy 功能,但基本单元测试没问题。bun run start:读取package.json的scripts字段,等效于npm run start。兼容性几乎没有槽点——只要不依赖npm run特有的环境变量(如npm_package_前缀),都能直接替换。bun install:包管理器。冷启动比 npm 快不少(具体倍数依赖缓存状态和网络),生成的node_modules结构与 npm 兼容,已有require路径都能找到。注意它用的是自己的锁文件bun.lockb,不过能读package-lock.json生成兼容结构。bunx cowsay 'Hello, world!':等效于npx。临时下载执行包,速度比 npx 快——因为 npx 内部调的是 npm,Bunx 是直接下载到全局缓存然后执行。
这五个命令对应 Node.js 生态里最常用的五个工具。如果你新建项目,理论上只需要装一个 bun。
兼容性:说的“drop-in”有底吗?
README 写的是“a drop-in replacement for Node.js”。我在一个中等规模 Express 项目(约 30 个依赖)上尝试替换,大部分能跑,但遇到两个典型问题:
fs.watch在某些 Linux 路径上行为不一致。Bun 使用的文件监听实现和 Node.js 不同(底层依赖不同库),如果你用了chokidar或nodemon,建议测试是否正常工作。- 依赖
node-gyp编译的原生模块(如sharp、bcrypt、sqlite3)无法加载。Bun 目前没有完整的 N-API 支持,部分模块会报错或崩溃。如果你的项目里这些模块是必须的,需要等 Bun 官方完善原生模块加载支持。
纯 JS/TS 包基本没问题。用了 child_process、path、fs、http 等核心模块,95% 的行为一致。Buffer、process、console 这类全局变量也等价的。但少部分 Node.js 内建 API(如 vm、async_hooks、trace_events)Bun 还没实现或行为有差异。
谁该现在试试
- 新建的纯 JS/TS 项目,没有原生模块依赖。可以用
bun init初始化项目,bun install装依赖,bun run执行脚本,省掉 npm/node/jest 三件套。 - CLI 工具开发者:Bun 的冷启动优势在短生命周期脚本上最明显。如果你写一个
cheerio抓取脚本或commander的 CLI,用bun run启动比用node快不少。 - 愿意尝鲜的团队:可以在 CI 或开发环境里用 Bun 试试,跑通测试后,生产环境仍用 Node.js。这样既能体验性能提升,又不影响稳定性。
谁不该现在跳坑
- 重度依赖原生模块的项目:除非你愿意等官方支持,或者改用纯 JS 替代品。比如用
better-sqlite3的可以暂时换成sql.js,但性能会下降。 - 生产环境高稳定性要求的应用:Bun 还在快速迭代,版本号还没到 1.0。虽然核心功能稳定,但遇到边缘 case 时,修复速度可能不如 Node.js 社区快。
- 对 Node.js 兼容性有强制要求:比如需要
VM沙箱或async_hooks做监控,Bun 目前不支持。
安装和升级
支持 Linux (x64/arm64)、macOS (x64/Apple Silicon)、Windows (x64/arm64)。建议用官方脚本:
# Linux/macOS
curl -fsSL https://bun.com/install | bash
# Windows
powershell -c "irm bun.sh/install.ps1 | iex"
# 或通过 npm/Homebrew/Docker,具体看 README
升级命令 bun upgrade,想体验最新开发版用 bun upgrade --canary。
Linux 需要内核 5.1 以上,推荐 5.6。x64 用户如果出现“illegal instruction”错误,去官网看 CPU 要求(README 有链接)。
不是 Node.js 杀手,是多一个选择
Bun 的意义不在于“取代 Node.js”,而在于给出了一个工程上更激进的折中:用单一二进制 + 不同引擎,换取更快的启动和更小的安装体积。它的成功取决于兼容性打磨和生态系统支持。
如果你刚好符合它的优势场景,值得花一下午迁移试试。不符合的话,等它成熟后再回头看也不迟。