📌 项目地址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。如果你现有项目用的是 mochavitest,迁移成本取决于 API 覆盖范围。Jest 用户需要注意:Bun 没有实现 Jest 的全部 mock 和 spy 功能,但基本单元测试没问题。
  • bun run start:读取 package.jsonscripts 字段,等效于 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 个依赖)上尝试替换,大部分能跑,但遇到两个典型问题:

  1. fs.watch 在某些 Linux 路径上行为不一致。Bun 使用的文件监听实现和 Node.js 不同(底层依赖不同库),如果你用了 chokidarnodemon,建议测试是否正常工作。
  2. 依赖 node-gyp 编译的原生模块(如 sharpbcryptsqlite3)无法加载。Bun 目前没有完整的 N-API 支持,部分模块会报错或崩溃。如果你的项目里这些模块是必须的,需要等 Bun 官方完善原生模块加载支持。

纯 JS/TS 包基本没问题。用了 child_processpathfshttp 等核心模块,95% 的行为一致。Bufferprocessconsole 这类全局变量也等价的。但少部分 Node.js 内建 API(如 vmasync_hookstrace_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”,而在于给出了一个工程上更激进的折中:用单一二进制 + 不同引擎,换取更快的启动和更小的安装体积。它的成功取决于兼容性打磨和生态系统支持。

如果你刚好符合它的优势场景,值得花一下午迁移试试。不符合的话,等它成熟后再回头看也不迟。

这篇文章对你有帮助吗?

发表回复