EAS Hosting worker 运行时
编辑页面
了解 EAS Hosting worker 运行时和 Node.js 兼容性。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
EAS Hosting 构建于 Cloudflare Workers,这是一个现代且强大的无服务器 API 平台,专为全球范围内的无缝扩展性、高可靠性和卓越性能而打造。
Cloudflare Workers 运行时基于 V8 JavaScript 引擎运行,该引擎同样为 Node.js 和 Chromium 中的 JavaScript 提供支持。不过,它的运行时与您在传统无服务器 Node.js 部署中习惯的环境有一些关键差异。
与其让每个请求在完整的 JavaScript 进程中运行,Workers 设计为在小型 V8 isolates 中运行它们,这是 V8 运行时的一项特性。可以把它们想象成单个 JavaScript 进程中的微型容器。
有关 Workers 工作原理的更多信息,请参阅 Cloudflare Workers 文档。
Node.js 兼容性
Cloudflare 是 Winter TC 的一部分,它更类似于浏览器和 service workers 中的 JavaScript 环境,而不是 Node.js。像这样的限制提供了比 Node.js 更轻量的运行时,同时仍然保持熟悉感。这个通用运行时是一个最小标准,如今已被许多 JavaScript 运行时支持。
这意味着,许多您可能习惯使用的 Node.js API,或您依赖的一些依赖项,并不能直接在 EAS Hosting 运行时中使用。为了简化这一过渡,由于并非所有依赖项都已获得对 Web API 的一等支持,因此存在 Node.js 兼容模块,您可以在 API 路由中使用它们。
| Node.js 内置模块 | 支持情况 | 实现说明 |
|---|---|---|
node:assert | ||
node:async_hooks | ||
node:buffer | ||
node:crypto | 某些已弃用的算法不可用 | |
node:console | 以部分可用的 JS shim 形式提供 | |
node:constants | ||
node:diagnostics_channel | 某些已弃用的算法未实现 | |
node:dns | Resolver 未实现,所有 DNS 请求都会发送到 Cloudflare | |
node:events | ||
node:fs | 支持,但使用内存文件系统 | |
node:http | 支持,但不包括服务器功能 | |
node:http2 | 部分支持。不支持服务器功能 | |
node:https | 支持,但不包括服务器功能 | |
node:module | SourceMap 未实现,其他方面部分支持 | |
node:net | Server 和 BlockList 未实现,客户端套接字部分支持 | |
node:os | 作为 JS stub 提供,返回与 Linux 上 Node.js 匹配的模拟值 | |
node:path | ||
node:path/posix | ||
node:path/win32 | ||
node:process | 作为 JS stub 提供 | |
node:punycode | ||
node:querystring | ||
node:readline | 作为不可用的 JS stub 提供,因为 workers 没有 stdin | |
node:stream | ||
node:stream/consumers | ||
node:stream/web | ||
node:string_decoder | ||
node:test | ||
node:timers | ||
node:tls | 支持,但不包括服务器功能 | |
node:trace_events | 作为不可用的 JS stub 提供 | |
node:tty | 作为 JS shim 提供,将输出重定向到 Console API | |
node:url | ||
node:util | ||
node:util/types | ||
node:worker_threads | 作为不可用的 JS stub 提供,因为 workers 不支持线程 | |
node:zlib |
这些模块通常提供的是 Node.js 对应模块的低精度 polyfill 或近似实现。
例如,fs、http 和 https 模块有额外的限制,并且属于 Node.js 兼容层,这与在 Node.js 进程中运行它们并不相同。
上述列出的任何 Node.js 模块都可以像往常一样在 API 路由或其依赖项中使用,并将使用相应的兼容模块。然而,其中一些模块可能不会提供任何实际功能,只是为了对 API 进行 shim 以防止运行时崩溃而存在。
未在此处提及的任何模块都不可用或不受支持,您的代码以及任何依赖项都不应依赖它们已被提供。
未来可能会添加更多 Node.js 兼容 shim,但本文档中未穷举列出的所有 Node.js API 都不应被期望可正常工作。
全局变量
| JavaScript 运行时全局变量 | 支持情况 | 实现说明 |
|---|---|---|
origin | 始终与传入请求的 Origin 标头相同 | |
process | ||
process.env | 填充为 EAS Hosting 环境变量 | |
process.stdout | 将输出重定向到 Console API(console.log)用于日志记录 | |
process.stderr | 将输出重定向到 Console API(console.error)用于日志记录 | |
setImmediate | ||
clearImmediate | ||
Buffer | 设置为来自 node:buffer 的 Buffer | |
EventEmitter | 设置为来自 node:events 的 EventEmitter | |
global | 设置为 globalThis | |
WeakRef | ||
FinalizationRegistry | ||
require | 支持外部 require,但仅限于已部署的 JS 文件和内置模块。不支持 Node 模块解析。 | |
require.cache |