Bun

Node.js 兼容性

每天,Bun 都越来越接近 100% Node.js API 兼容性。如今,流行的框架如 Next.js、Express 以及数百万个旨在用于 Node 的 npm 包都可以在 Bun 中正常工作。为了确保兼容性,我们在每次 Bun 发布之前都会运行来自 Node.js 测试套件的数千个测试。

如果一个包在 Node.js 中可以工作,但在 Bun 中无法工作,我们将其视为 Bun 中的一个错误。提交 issue,我们会修复它。

此页面定期更新,以反映最新版本 Bun 的兼容性状态。以下信息反映了 Bun 与 Node.js v23 的兼容性。

内置 Node.js 模块

node:assert

🟢 完全实现。

node:buffer

🟢 完全实现。

node:console

🟢 完全实现。

node:dgram

🟢 完全实现。 > 90% 的 Node.js 测试套件通过。

node:diagnostics_channel

🟢 完全实现。

node:dns

🟢 完全实现。 > 90% 的 Node.js 测试套件通过。

node:events

🟢 完全实现。 EventEmitterAsyncResource 底层使用 AsyncResource。EventEmitter 的 Node.js 测试套件通过率 100%。

node:fs

🟢 完全实现。 92% 的 Node.js 测试套件通过。

node:http

🟢 完全实现。 出站客户端请求正文目前是缓冲的,而不是流式的。

node:https

🟢 API 已实现,但并非总是使用 Agent

node:os

🟢 完全实现。 100% 的 Node.js 测试套件通过。

node:path

🟢 完全实现。 100% 的 Node.js 测试套件通过。

node:punycode

🟢 完全实现。 100% 的 Node.js 测试套件通过,已由 Node.js 弃用

node:querystring

🟢 完全实现。 100% 的 Node.js 测试套件通过。

node:readline

🟢 完全实现。

node:stream

🟢 完全实现。

node:string_decoder

🟢 完全实现。 100% 的 Node.js 测试套件通过。

node:timers

🟢 建议改用全局 setTimeout 等。

node:tty

🟢 完全实现。

node:url

🟢 完全实现。

node:zlib

🟢 完全实现。 98% 的 Node.js 测试套件通过。

node:async_hooks

🟡 AsyncLocalStorageAsyncResource 已实现。 v8 promise hooks 不会被调用,并且强烈建议不要使用

node:child_process

🟡 缺少 proc.gid proc.uidStream 类未导出。 IPC 无法发送 socket 句柄。 Node.js <> Bun IPC 可以与 JSON 序列化一起使用。

node:cluster

🟡 句柄和文件描述符无法在 worker 之间传递,这意味着跨进程的 HTTP 请求负载均衡目前仅在 Linux 上受支持(通过 SO_REUSEPORT)。其他方面已实现,但未经实战检验。

node:crypto

🟡 缺少 ECDH checkPrime checkPrimeSync generatePrime generatePrimeSync hkdf hkdfSync secureHeapUsed setEngine setFips

某些方法尚未优化。

node:domain

🟡 缺少 Domain active

node:http2

🟡 客户端和服务器已实现(通过了 gRPC 测试套件的 95.25%)。 缺少 options.allowHTTP1options.enableConnectProtocol、ALTSVC 扩展和 http2stream.pushStream

node:module

🟡 缺少 runMain syncBuiltinESMExports, Module#load()。 支持覆盖 ESM 和 CJS 模块的 require.cachemodule._extensionsmodule._pathCachemodule._cache 是空操作。 module.register 未实现,我们建议在此期间使用 Bun.plugin

node:net

🟡 SocketAddress 类未公开(但已实现)。 BlockList 存在但为空操作。

node:perf_hooks

🟡 缺少 createHistogram monitorEventLoopDelay。 建议使用全局 performance 而不是 perf_hooks.performance

node:process

🟡 请参阅 process 全局对象。

node:sys

🟡 请参阅 node:util

node:tls

🟡 缺少 tls.createSecurePair

node:util

🟡 缺少 getCallSite getCallSites getSystemErrorMap getSystemErrorMessage transferableAbortSignal transferableAbortController MIMEType MIMEParams

node:v8

🟡 writeHeapSnapshotgetHeapSnapshot 已实现。 serializedeserialize 使用 JavaScriptCore 的 wire 格式而不是 V8 的格式。 其他方法未实现。 对于性能分析,请改用 bun:jsc

node:vm

🟡 核心功能工作正常,但实验性的 VM ES 模块未实现,包括 vm.Modulevm.SourceTextModulevm.SyntheticModuleimportModuleDynamicallyvm.measureMemory。 诸如 timeoutbreakOnSigintcachedData 等选项尚未实现。

node:wasi

🟡 部分实现。

node:worker_threads

🟡 Worker 不支持以下选项:stdin stdout stderr trackedUnmanagedFds resourceLimits。 缺少 markAsUntransferable moveMessagePortToContext getHeapSnapshot

node:inspector

🔴 未实现。

node:repl

🔴 未实现。

node:sqlite

🔴 未实现。

node:test

🔴 未实现。 请改用 bun:test

node:trace_events

🔴 未实现。

Node.js 全局对象

下表列出了 Node.js 和 Bun 当前兼容性状态实现的所有全局对象。

AbortController

🟢 完全实现。

AbortSignal

🟢 完全实现。

Blob

🟢 完全实现。

Buffer

🟢 完全实现。

ByteLengthQueuingStrategy

🟢 完全实现。

__dirname

🟢 完全实现。

__filename

🟢 完全实现。

atob()

🟢 完全实现。

BroadcastChannel

🟢 完全实现。

btoa()

🟢 完全实现。

clearImmediate()

🟢 完全实现。

clearInterval()

🟢 完全实现。

clearTimeout()

🟢 完全实现。

CompressionStream

🔴 未实现。

console

🟢 完全实现。

CountQueuingStrategy

🟢 完全实现。

Crypto

🟢 完全实现。

SubtleCrypto (crypto)

🟢 完全实现。

CryptoKey

🟢 完全实现。

CustomEvent

🟢 完全实现。

DecompressionStream

🔴 未实现。

Event

🟢 完全实现。

EventTarget

🟢 完全实现。

exports

🟢 完全实现。

fetch

🟢 完全实现。

FormData

🟢 完全实现。

global

🟢 已实现。 这是一个包含全局命名空间中所有对象(例如 __dirname 而不是 global.__dirname)的对象。 它很少被直接引用,因为它的内容无需额外的修饰符即可用。

globalThis

🟢 global 的别名。

Headers

🟢 完全实现。

MessageChannel

🟢 完全实现。

MessageEvent

🟢 完全实现。

MessagePort

🟢 完全实现。

module

🟢 完全实现。

PerformanceEntry

🟢 完全实现。

PerformanceMark

🟢 完全实现。

PerformanceMeasure

🟢 完全实现。

PerformanceObserver

🟢 完全实现。

PerformanceObserverEntryList

🟢 完全实现。

PerformanceResourceTiming

🟢 完全实现。

performance

🟢 完全实现。

process

🟡 大部分已实现。 process.binding(某些软件包依赖的内部 Node.js 绑定)部分实现。 process.title 目前在 macOS 和 Linux 上是空操作。 getActiveResourcesInfo setActiveResourcesInfogetActiveResourcessetSourceMapsEnabled 是桩代码。 较新的 API,如 process.loadEnvFileprocess.getBuiltinModule 尚未实现。

queueMicrotask()

🟢 完全实现。

ReadableByteStreamController

🟢 完全实现。

ReadableStream

🟢 完全实现。

ReadableStreamBYOBReader

🟢 完全实现。

ReadableStreamBYOBRequest

🟢 完全实现。

ReadableStreamDefaultController

🟢 完全实现。

ReadableStreamDefaultReader

🟢 完全实现。

require()

🟢 完全实现,包括 require.mainrequire.cacherequire.resolverequire.extensions 是桩代码。

Response

🟢 完全实现。

Request

🟢 完全实现。

setImmediate()

🟢 完全实现。

setInterval()

🟢 完全实现。

setTimeout()

🟢 完全实现。

structuredClone()

🟢 完全实现。

SubtleCrypto

🟢 完全实现。

DOMException

🟢 完全实现。

TextDecoder

🟢 完全实现。

TextDecoderStream

🟢 完全实现。

TextEncoder

🟢 完全实现。

TextEncoderStream

🟢 完全实现。

TransformStream

🟢 完全实现。

TransformStreamDefaultController

🟢 完全实现。

URL

🟢 完全实现。

URLSearchParams

🟢 完全实现。

WebAssembly

🟢 完全实现。

WritableStream

🟢 完全实现。

WritableStreamDefaultController

🟢 完全实现。

WritableStreamDefaultWriter

🟢 完全实现。