Cloudflare Worker 实验性
Elysia 现在通过 实验性 的 Cloudflare Worker 适配器支持 Cloudflare Worker。
- 您需要 Wrangler 来设置并启动开发服务器。
bash
wrangler init elysia-on-cloudflare
- 然后将 Cloudflare 适配器添加到您的 Elysia 应用中,并确保在导出应用之前调用
.compile()
。
ts
import { Elysia } from 'elysia'
import { CloudflareAdapter } from 'elysia/adapter/cloudflare'
export default new Elysia({
adapter: CloudflareAdapter
})
.get('/', () => 'Hello Cloudflare Worker!')
// 这是在 Cloudflare Worker 上使 Elysia 工作的必需步骤
.compile()
- 确保在您的 wrangler 配置中将
compatability_date
设置为至少2025-06-01
jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "elysia-on-cloudflare",
"main": "src/index.ts",
"compatibility_date": "2025-06-01"
}
toml
main = "src/index.ts"
name = "elysia-on-cloudflare"
compatibility_date = "2025-06-01"
- 现在您可以使用以下命令启动开发服务器:
bash
wrangler dev
这应该会在 http://localhost:8787
启动开发服务器
您不需要 nodejs_compat
标志,因为 Elysia 不使用任何 Node.js 内置模块(或者我们使用的模块尚未支持 Cloudflare Worker)
限制
以下是在 Cloudflare Worker 上使用 Elysia 的已知限制:
Elysia.file
和 Static Plugin 不起作用,因为 缺少fs
模块- OpenAPI Type Gen 不起作用,因为 缺少
fs
模块 - 您无法在服务器启动前定义 Response,或者使用会这样做的插件。
静态文件
Static Plugin 不起作用,您仍然可以使用 Cloudflare 的内置静态文件服务 来提供静态文件。
在您的 wrangler 配置中添加以下内容:
jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "elysia-on-cloudflare",
"main": "src/index.ts",
"compatibility_date": "2025-06-01",
"assets": { "directory": "public" }
}
toml
name = "elysia-on-cloudflare"
main = "src/index.ts"
compatibility_date = "2025-06-01"
assets = { directory = "public" }
在 public
文件夹中创建并放置您的静态文件。
假设您有如下文件夹结构:
│
├─ public
│ ├─ kyuukurarin.mp4
│ └─ static
│ └─ mika.webp
├─ src
│ └── index.ts
└─ wrangler.toml
然后您应该能够从以下路径访问您的静态文件:
AoT 编译
以前,要在 Cloudflare Worker 上使用 Elysia,您必须在 Elysia 构造函数中传递 aot: false
。
现在这不再必要,因为 Cloudflare 现在支持在启动期间进行函数编译
从 Elysia 1.4.7 开始,您现在可以使用 Ahead of Time Compilation 与 Cloudflare Worker 一起使用,并删除 aot: false
标志。
ts
import { Elysia } from 'elysia'
import { CloudflareAdapter } from 'elysia/adapter/cloudflare'
export default new Elysia({
aot: false,
adapter: CloudflareAdapter
})
否则,如果您不想使用 Ahead of Time Compilation,您仍然可以使用 aot: false
,但我们推荐您使用它以获得更好的性能和准确的插件封装。