Skip to main content每一天,Bun 都越来越接近 100% 的 Node.js API 兼容性。今天,像 Next.js、Express 这样的流行框架以及数百万为 Node 设计的 npm 包都可以与 Bun 正常工作。为确保兼容性,我们在每次 Bun 发布前都会运行数千个来自 Node.js 测试套件的测试。
如果一个包在 Node.js 中可以工作但在 Bun 中不行,我们认为这是 Bun 的一个 bug。 请 提交一个问题 我们会修复它。
此页面定期更新以反映 Bun 最新版本的兼容性状态。以下信息反映了 Bun 与 Node.js v23 的兼容性。
内置 Node.js 模块
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。> 90% 的 Node.js 测试套件通过。
🟢 完全实现。
🟢 完全实现。> 90% 的 Node.js 测试套件通过。
🟢 完全实现。100% 的 Node.js 测试套件通过。EventEmitterAsyncResource 在底层使用 AsyncResource。
🟢 完全实现。92% 的 Node.js 测试套件通过。
🟢 已实现 API。传出客户端请求体当前被缓冲而不是流式传输。
🟢 已实现 API,但 Agent 还没有总是被使用。
🟢 完全实现。100% 的 Node.js 测试套件通过。
🟢 完全实现。100% 的 Node.js 测试套件通过。
🟢 完全实现。100% 的 Node.js 测试套件通过,被 Node.js 弃用。
🟢 完全实现。100% 的 Node.js 测试套件通过。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。100% 的 Node.js 测试套件通过。
🟢 建议使用全局的 setTimeout 等。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。98% 的 Node.js 测试套件通过。
🟡 AsyncLocalStorage 和 AsyncResource 已实现。v8 promise hooks 没有被调用,且其使用被 强烈反对。
🟡 缺少 proc.gid proc.uid。Stream 类未导出。IPC 不能发送 socket 句柄。Node.js ↔ Bun IPC 可以使用 JSON 序列化。
🟡 句柄和文件描述符不能在 worker 之间传递,这意味着跨进程的 HTTP 请求负载均衡目前仅在 Linux 上受支持(通过 SO_REUSEPORT)。否则已实现,但未经充分测试。
🟡 缺少 secureHeapUsed setEngine setFips
🟡 缺少 Domain active
🟡 客户端和服务端已实现(95.25% 的 gRPC 测试套件通过)。缺少 options.allowHTTP1、options.enableConnectProtocol、ALTSVC 扩展和 http2stream.pushStream。
🟡 缺少 syncBuiltinESMExports、Module#load()。支持覆盖 ESM & CJS 模块的 require.cache。module._extensions、module._pathCache、module._cache 无操作。module.register 未实现,我们建议同时使用 Bun.plugin。
🟢 完全实现。
🟡 已实现 API,但 Node.js 测试套件尚未通过此模块。
🟡 参见 process 全局对象。
🟡 参见 node:util。
🟡 缺少 tls.createSecurePair。
🟡 缺少 getCallSite getCallSites getSystemErrorMap getSystemErrorMessage transferableAbortSignal transferableAbortController
🟡 writeHeapSnapshot 和 getHeapSnapshot 已实现。serialize 和 deserialize 使用 JavaScriptCore 的线格式而不是 V8 的。其他方法未实现。对于性能分析,请使用 bun:jsc。
🟡 核心功能和 ES 模块已实现,包括 vm.Script、vm.createContext、vm.runInContext、vm.runInNewContext、vm.runInThisContext、vm.compileFunction、vm.isContext、vm.Module、vm.SourceTextModule、vm.SyntheticModule 和 importModuleDynamically 支持。timeout 和 breakOnSigint 等选项完全支持。缺少 vm.measureMemory 和一些 cachedData 功能。
🟡 部分实现。
🟡 Worker 不支持以下选项:stdin stdout stderr trackedUnmanagedFds resourceLimits。缺少 markAsUntransferable moveMessagePortToContext。
🔴 未实现。
🔴 未实现。
🔴 未实现。
🟡 部分实现。缺少 mocks、snapshots、timers。请改用 bun:test。
🔴 未实现。
Node.js 全局对象
下表列出了 Node.js 实现的所有全局对象以及 Bun 的当前兼容性状态。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 已实现。这是一个包含全局命名空间中所有对象的对象。很少直接引用它,因为其内容可在无需额外前缀的情况下访问,例如 __dirname 而不是 global.__dirname。
🟢 别名为 global。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟡 大部分已实现。process.binding(一些包依赖的内部 Node.js 绑定)部分实现。process.title 目前在 macOS & Linux 上是无操作。getActiveResourcesInfo setActiveResourcesInfo、getActiveResources 和 setSourceMapsEnabled 是存根。较新的 API 如 process.loadEnvFile 和 process.getBuiltinModule 还未实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现,包括 require.main、require.cache、require.resolve。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。