npm 包,都可以在 Bun 中运行。为确保兼容性,我们会在每次发布 Bun 之前,运行 Node.js 测试套件中的数千项测试。
如果某个包在 Node.js 中可以运行,但在 Bun 中无法运行,我们会将其视为 Bun 的 bug。 提交问题,我们会修复它。
此页面会定期更新,反映 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
🟢 完全实现。Node.js 测试套件 100% 通过。EventEmitterAsyncResource 底层使用 AsyncResource。
node:fs
🟢 完全实现。Node.js 测试套件通过率为 92%。
node:http
🟢 完全实现。传出的客户端请求正文会被缓冲,而不是进行流式传输。
node:https
🟢 API 已实现,但并不总是使用 Agent。
node:os
🟢 完全实现。Node.js 测试套件 100% 通过。
node:path
🟢 完全实现。Node.js 测试套件 100% 通过。
node:punycode
🟢 完全实现。Node.js 测试套件 100% 通过,Node.js 已弃用。
node:querystring
🟢 完全实现。Node.js 测试套件 100% 通过。
node:readline
🟢 完全实现。
node:stream
🟢 完全实现。
node:string_decoder
🟢 完全实现。Node.js 测试套件 100% 通过。
node:timers
🟢 请改用全局的 setTimeout 及相关函数。
node:tty
🟢 完全实现。
node:url
🟢 完全实现。
node:zlib
🟢 完全实现。Node.js 测试套件通过率为 98%。
node:async_hooks
🟡 AsyncLocalStorage 和 AsyncResource 已实现。不会调用 V8 promise 钩子,强烈不建议使用它(详见此处)。
node:child_process
🟡 缺少 proc.gid 和 proc.uid。Stream 类未导出。IPC 不能发送 socket 句柄。Node.js ↔ Bun 的 IPC 可通过 JSON 序列化使用。
node:cluster
🟡 句柄和文件描述符无法在工作进程之间传递,因此仅在 Linux 上支持跨进程对 HTTP 请求进行负载均衡(通过 SO_REUSEPORT)。除此之外已实现,但尚未经过充分测试。
node:crypto
🟡 缺少 secureHeapUsed、setEngine、setFips。
node:domain
🟡 缺少 Domain 和 active。
node:http2
🟡 客户端和服务器均已实现(gRPC 测试套件通过率为 95.25%)。
node:module
🟡 缺少 syncBuiltinESMExports、Module#load()。支持为 ESM 和 CJS 模块覆盖 require.cache。module._extensions、module._pathCache、module._cache 均为空操作。module.register 尚未实现;我们建议改用 Bun.plugin。
node:net
🟢 完全实现。
node:perf_hooks
🟡 API 已实现,但该模块的 Node.js 测试套件无法通过。
node:process
🟡 见 process 全局变量部分。
node:sys
🟡 见 node:util。
node:tls
🟡 缺少 tls.createSecurePair。
node:util
🟡 缺少 getCallSite、getCallSites、getSystemErrorMap、getSystemErrorMessage、transferableAbortSignal、transferableAbortController。
node:v8
🟡 已实现 writeHeapSnapshot 和 getHeapSnapshot。serialize 和 deserialize 使用的是 JavaScriptCore 的线格式(wire format)而非 V8 的。其他方法未实现。做性能分析时建议使用 bun:jsc。
node:vm
🟡 核心功能和 ES 模块均已实现,包括 vm.Script、vm.createContext、vm.runInContext、vm.runInNewContext、vm.runInThisContext、vm.compileFunction、vm.isContext、vm.Module、vm.SourceTextModule、vm.SyntheticModule 以及对 importModuleDynamically 的支持。timeout 和 breakOnSigint 等选项均获完整支持。
node:wasi
🟡 部分实现。
node:worker_threads
🟡 Worker 不支持以下选项:stdin、stdout、stderr、trackedUnmanagedFds、resourceLimits。缺少 markAsUntransferable 和 moveMessagePortToContext。
node:inspector
🟡 部分实现。支持 Profiler API(Profiler.enable、Profiler.disable、Profiler.start、Profiler.stop、Profiler.setSamplingInterval)。其他 inspector API 尚未实现。
node:repl
🟡 大部分已实现。bun --interactive 会启动兼容 Node.js 的 REPL。结果预览(需要基于 V8 inspector 的无副作用求值)、useGlobal: true 模式下对 let/const/class 绑定的制表符补全,以及部分 V8 特有的错误消息措辞存在差异。
node:sqlite
🟢 完全实现。backup() 会同步运行,并在复制期间阻塞事件循环(Node 会在工作线程上运行该操作)。作为数据库路径的 Buffer/Uint8Array 必须是有效的 UTF-8(Node 会直接传递原始字节;Bun 会对非 UTF-8 内容拒绝并返回 ERR_INVALID_ARG_VALUE)。在 macOS 上,Bun 使用系统的 libsqlite3.dylib;loadExtension()(以及在较旧的 macOS 版本上,createSession()/applyChangeset())需要完整的 SQLite 构建版本——请在打开数据库前调用 require("bun:sqlite").Database.setCustomSQLite(path)。
node:test
🟡 部分实现。当测试文件在 bun test 下运行时,进程内 API 可用:测试、测试套件、子测试、钩子、t.plan()、t.assert、assert.register()、t.waitFor()、getTestContext() 以及 t.mock(函数/方法/获取器/设置器/属性模拟和模拟计时器)。缺少 run()、node:test/reporters、快照测试、mock.module()、代码覆盖率、--test-only、测试级别的 signal/t.signal 中止功能,以及 Node 的 --test CLI 运行模式。test.only() / {only: true} 可接受,但不会进行筛选。concurrency 会经过验证,但子测试始终串行运行。请改用 bun:test。
node:trace_events
🟢 完全实现。
Node.js 全局变量
以下列表涵盖 Node.js 实现的所有全局变量,以及 Bun 对每个全局变量的兼容性状态。AbortController
🟢 完全实现。
AbortSignal
🟢 完全实现。
Blob
🟢 完全实现。
Buffer
🟢 完全实现。
ByteLengthQueuingStrategy
🟢 完全实现。
__dirname
🟢 完全实现。
__filename
🟢 完全实现。
atob()
🟢 完全实现。
Atomics
🟢 完全实现。
BroadcastChannel
🟢 完全实现。
btoa()
🟢 完全实现。
clearImmediate()
🟢 完全实现。
clearInterval()
🟢 完全实现。
clearTimeout()
🟢 完全实现。
CompressionStream
🟢 完全实现。
console
🟢 完全实现。
CountQueuingStrategy
🟢 完全实现。
Crypto
🟢 完全实现。
SubtleCrypto (crypto)
🟢 完全实现。
CryptoKey
🟢 完全实现。
CustomEvent
🟢 完全实现。
DecompressionStream
🟢 完全实现。
Event
🟢 完全实现。
EventTarget
🟢 完全实现。
exports
🟢 完全实现。
fetch
🟢 完全实现。
FormData
🟢 完全实现。
global
🟢 已实现。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、setActiveResourcesInfo、getActiveResources 和 setSourceMapsEnabled 为空实现。较新的 API(如 process.loadEnvFile)尚未实现。
queueMicrotask()
🟢 完全实现。
ReadableByteStreamController
🟢 完全实现。
ReadableStream
🟢 完全实现。
ReadableStreamBYOBReader
🟢 完全实现。
ReadableStreamBYOBRequest
🟢 完全实现。
ReadableStreamDefaultController
🟢 完全实现。
ReadableStreamDefaultReader
🟢 完全实现。
require()
🟢 完全实现,包括 require.main、require.cache、require.resolve。