编写 Worker 时,你可能需要从 npm ↗ 导入包。许多 npm 包依赖 Node.js 运行时 ↗ 的 API,若这些 Node.js API 不可用,它们将无法工作。
Cloudflare Workers 以两种形式提供 Node.js API 的子集:
- 作为 Workers 运行时提供的内置 API。其中大多数 API 是对应 Node.js API 的完整实现,少数为部分支持。
- 作为 polyfill 垫片实现,由 Wrangler 添加到你的 Worker 代码中,允许导入模块,但调用 API 方法会抛出错误。
要启用内置 Node.js API 并添加 polyfill,请在你的 Wrangler 配置文件 中添加 nodejs_compat 兼容性标志,并确保 Worker 的兼容性日期为 2024-09-23 或更晚。详细了解 Node.js 兼容性标志和 v2。
{
"compatibility_flags": ["nodejs_compat"],
// Set this to today's date
"compatibility_date": "2026-08-17",
}compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-17"本节中列出的 Node.js 运行时 API,状态为「🟢 已支持」的,目前在 Workers 运行时中原生支持。状态为「🟡 部分支持」的项包含可用的 API,但未实现完整的 Node.js API 表面。
Node.js 中已弃用或实验性的 API ↗,以及不适合无服务器上下文的 API,未包含在本节的支持 API 列表中。其中一些仅用于导入的桩模块在非功能性桩模块中单独列出。
| API 名称 | Workers 运行时原生支持 |
|---|---|
| 断言测试 | 🟢 已支持 |
| 异步上下文跟踪 | 🟢 已支持 |
| Buffer | 🟢 已支持 |
| Console ↗ | 🟡 部分支持 |
| Crypto | 🟢 已支持 |
| Debugger | 🟢 通过 Chrome DevTools 集成 支持 |
| Diagnostics Channel | 🟢 已支持 |
| DNS | 🟡 部分支持 |
| Errors | 🟢 已支持 |
| Events | 🟢 已支持 |
| File system | 🟢 已支持 |
| Globals | 🟢 已支持 |
| HTTP | 🟢 已支持 |
| HTTPS | 🟢 已支持 |
| Module ↗ | 🟡 部分支持 |
| Net | 🟢 已支持 |
| OS ↗ | 🟡 部分支持 |
| Path | 🟢 已支持 |
| Performance hooks ↗ | 🟡 部分支持 |
| Process | 🟢 已支持 |
| Punycode ↗ (deprecated) | 🟢 已支持 |
| Query strings ↗ | 🟢 已支持 |
| Stream | 🟢 已支持 |
| String decoder | 🟢 已支持 |
| Test runner | 🟡 部分支持 |
| Timers | 🟢 已支持 |
| TLS/SSL | 🟡 部分支持 |
| URL | 🟢 已支持 |
| Utilities | 🟢 已支持 |
| Web Crypto API | 🟢 已支持 |
| Web Streams API | 🟢 已支持 |
| Zlib | 🟢 已支持 |
除非另有说明,Workers 中 Node.js API 的原生实现旨在与 Node.js 当前版本 ↗ 的实现保持一致。
如果你希望使用的 API 尚未提供,并建议 Workers 支持它,请在 GitHub 的 Node.js API 讨论分类 ↗ 中发帖或评论。
部分 Node.js 模块以非功能性桩的形式提供。桩可以导入或 require,但不提供底层 Node.js API 的工作实现。这些桩的存在是为了让检查模块是否存在的包能在 Workers 中加载,但不适合在应用代码中直接使用。
以下桩仅在启用 nodejs_compat 兼容性标志且 Worker 兼容性日期为所示日期或更晚时自动启用。若要更早启用,请添加相应的 enable 标志。若要在该日期之后仍保持不可用,请添加相应的 disable 标志。
| Stub 模块 | 在以下日期或之后启用 nodejs_compat |
启用标志 | 禁用标志 |
|---|---|---|---|
node:http2 ↗ |
2025-09-01 |
enable_nodejs_http2_module |
disable_nodejs_http2_module |
node:vm ↗ |
2025-10-01 |
enable_nodejs_vm_module |
disable_nodejs_vm_module |
node:cluster ↗ |
2025-12-04 |
enable_nodejs_cluster_module |
disable_nodejs_cluster_module |
node:domain ↗ |
2025-12-04 |
enable_nodejs_domain_module |
disable_nodejs_domain_module |
node:trace_events ↗ |
2025-12-04 |
enable_nodejs_trace_events_module |
disable_nodejs_trace_events_module |
node:wasi ↗ |
2025-12-04 |
enable_nodejs_wasi_module |
disable_nodejs_wasi_module |
node:_stream_wrap |
2026-01-29 |
enable_nodejs_stream_wrap_module |
disable_nodejs_stream_wrap_module |
node:dgram ↗ |
2026-01-29 |
enable_nodejs_dgram_module |
disable_nodejs_dgram_module |
node:inspector ↗ |
2026-01-29 |
enable_nodejs_inspector_module |
disable_nodejs_inspector_module |
node:sqlite ↗ |
2026-01-29 |
enable_nodejs_sqlite_module |
disable_nodejs_sqlite_module |
node:child_process ↗ |
2026-03-17 |
enable_nodejs_child_process_module |
disable_nodejs_child_process_module |
node:readline ↗ |
2026-03-17 |
enable_nodejs_readline_module |
disable_nodejs_readline_module |
node:repl ↗ |
2026-03-17 |
enable_nodejs_repl_module |
disable_nodejs_repl_module |
node:tty ↗ |
2026-03-17 |
enable_nodejs_tty_module |
disable_nodejs_tty_module |
node:v8 ↗ |
2026-03-17 |
enable_nodejs_v8_module |
disable_nodejs_v8_module |
node:worker_threads ↗ |
2026-03-17 |
enable_nodejs_worker_threads_module |
disable_nodejs_worker_threads_module |
Workers 运行时中尚未支持的 Node.js API 通过 Wrangler 进行 polyfill,Wrangler 使用 unenv ↗。若启用了 nodejs_compat 兼容性标志,且 Worker 的兼容性日期为 2024-09-23 或更晚,Wrangler 会自动将 polyfill 注入到你的 Worker 代码中。
添加 polyfill 可最大化与现有 npm 包的兼容性,提供带有模拟方法的模块。调用这些模拟方法要么无操作,要么抛出类似以下消息的错误:
[unenv] <method name> is not implemented yet!这允许你导入使用这些 Node.js 模块的包,即使某些方法尚未支持。
若只需启用 Node.js AsyncLocalStorage API,可启用 nodejs_als 兼容性标志:
{
"compatibility_flags": ["nodejs_als"],
}compatibility_flags = [ "nodejs_als" ]