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 测试套件通过。
🟢 完全实现。Node.js 测试套件 100% 通过。EventEmitterAsyncResource 底层使用 AsyncResource。
🟢 完全实现。Node.js 测试套件通过率为 92%。
🟢 完全实现。当前传出客户端请求体是缓冲的,而非流式的。
🟢 API 已实现,但 Agent 还未完全使用。
🟢 完全实现。Node.js 测试套件 100% 通过。
🟢 完全实现。Node.js 测试套件 100% 通过。
🟢 完全实现。Node.js 测试套件 100% 通过,Node.js 已弃用。
🟢 完全实现。Node.js 测试套件 100% 通过。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。Node.js 测试套件 100% 通过。
🟢 推荐直接使用全局的 setTimeout 等函数。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。Node.js 测试套件通过率为 98%。
🟡 实现了 AsyncLocalStorage 和 AsyncResource。v8 的 promise 钩子未调用,且其使用被 强烈不建议。
🟡 缺少 proc.gid 和 proc.uid。Stream 类未导出。IPC 不能发送 socket 句柄。Node.js ↔ Bun 的 IPC 可通过 JSON 序列化使用。
🟡 句柄和文件描述符不能在工作线程间传递,这意味着多进程 HTTP 请求负载均衡目前仅在 Linux 平台通过 SO_REUSEPORT 支持。其他部分已实现,但未经过严格测试。
🟡 缺少 secureHeapUsed、setEngine、setFips。
🟡 缺少 Domain 和 active。
🟡 已实现客户端和服务端(gRPC 测试套件通过率为 95.25%)。缺少 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 的线格式(wire format)而非 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)和定时器。建议使用 bun:test。
🔴 未实现。
Node.js 全局变量
下表列出了 Node.js 实现的所有全局变量以及 Bun 当前的兼容状态。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 已实现。它是包含全局命名空间中所有对象的对象。一般很少直接引用,因为其内容可直接使用,无需额外前缀,例如使用 __dirname 而非 global.__dirname。
🟢 别名指向 global。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟡 大部分已实现。process.binding(Node.js 内部绑定,部分包依赖)部分实现。process.title 在 macOS 和 Linux 上目前无操作。getActiveResourcesInfo、setActiveResourcesInfo、getActiveResources 和 setSourceMapsEnabled 是存根。新接口如 process.loadEnvFile 和 process.getBuiltinModule 尚未实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现,包括 require.main、require.cache、require.resolve。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。
🟢 完全实现。