🕌

【追記あり】Elysia + Cloudflare Workers(Wrangler)を使うには

に公開

Bun環境でしか動かないと思われがちなElysia.jsですが、Node環境(pnpm)でも動きます。
また、Wranglerと組み合わせて、Cloudflare Workersで使うこともできます。

結論

以下のようにすれば動かすことができます。

環境のセットアップ

pnpm install elysia
pnpm install -D wrangler @types/node

Wranglerの設定

wrangler.json
{
    "$schema": "./node_modules/wrangler/config-schema.json",
    "main": "index.ts",
    "name": "elysia-test",
    "compatibility_date": "2025-03-25",
    "compatibility_flags": ["nodejs_compat"],
    "observability": {
        "enabled": true
    },
}

compatibility_flagとdate(互換性フラグ)は

https://developers.cloudflare.com/workers/configuration/compatibility-dates/

ここを参考に任意のものを設定してください。

サンプルコードの作成

index.ts
import { Elysia } from 'elysia'

const app = new Elysia({
    aot: false,
})
	.get('/', () => 'Hello Elysia')

export default app

重要なのが、aot:falseで、これを設定しないと事前コンパイルが動作し、エラーになります。

起動する

pnpm wrangler dev index.ts --port 8080

これで開発サーバーが起動します。

EvalError: Code generation from strings disallowed for this context といわれた

aot:false を設定してますか?
してない場合はエラーになります。

service core:user:elysia-test: Uncaught Error: WebStandard does not support listen, you might want to export default Elysia.fetch instead といわれた

.listen でリッスンを設定していませんか?
している場合は外しましょう。

以上

ElysiaはWinterCG(現WinterTC)に準拠した、Web Standardなフレームワークなので、意外とどこでも動きます(まだちゃんと使い込んでるわけではないので、もしかしたら一部Bun依存で動かないとかあるかも、例えばここでは、Elysia static pluginはBun.file依存だと書かれている)

ElysiaはHonoに似て結構書きやすく型安全なフレームワークなので、もっといろんなところで使ってほしいです

(多分パフォーマンスも落ちると思うので、はやくCloudflare Workers ContainerでBunで動かしたいな)

参考

https://github.com/elysiajs/elysia/issues/278
https://elysiajs.com/patterns/configuration.html#aot
https://github.com/elysiajs/elysia/issues/58

Discussion