優雅的三拍,主機誰顧? 啊你顧- Cloudflare Worker

Apr 13, 2025

前言

終於到了最終章,當 backend都寫完放在哪邊就得考量一些事情

萬梓良-做大事要有三個條件.jpg

  • 價格($)
  • 規格($)
  • 維護成本($)

這麼多 $ 還是去寫 php好了(誤),能跑、不要壞、可擴展才是重點,很多新創都是先做,跑起來之後賺到錢,打掉再來就好啦!甚至換語言, JavaScript 是個讓大家又愛又恨的東西,但 JavaScript嚴格來說不是後端語言,早期是 Ryan Dahl 把 Chrome的 V8包起來,作為 JavaScript的 runtime,讓他可以在 Server端可以跑 JavaScript 語言,並且像 backend一樣運作,如今很多人都做了新的 runtime。

Bun

主要使用 Zig 作為語言編寫,以 JavascriptCore Apple Safari的 JavaScript 引擎,用一個包子當作他的Logo。

Deno

則是由 Nodejs 之父用 Rust,一樣是以 V8為引擎來解釋 JavaScript

所以!到底要放哪?

總合以上內容, serverless 無疑是最佳方案,Cloudflare worker,而他的 runtime是 workerd,主要由C++完成,V8作為引擎。

Runtime different

最大的差異在於環境變數的取得,一般 Server side習慣用 .env 去填寫環境變數,用 process.env.variable去呼叫。

而在 Cloudflare worker可以用

fetch的參數

export default { async fetch(request, env) { return new Response(`Hi, ${env.NAME}`); }, };

import

import { env } from "cloudflare:workers"; console.log(`Hi, ${this.env.Name}`);

我是使用第一個方式,因為跟 Elysia 的 coding style蠻合的,後面可以看到。

.env 被 wrangler.toml取代

先執行安裝

bun create cloudflare

他就會產生一個新的 wrangler.jsonc 檔案,可以參考他的說明,因為幾乎是全部 Cloudflare 的設定,無法一一的說明,但可以看除了服務設定的.env 變數宣告部分。

{ "name": "my-worker-dev", "vars": { "API_HOST": "example.com", "API_ACCOUNT_ID": "example_user", "SERVICE_X_DATA": { "URL": "service-x-api.dev.example", "MY_ID": 123 } } }

像是這邊以 API_HOSTAPI_ACCOUNT_ID,未來就可以用 env.API_HOST 取得。

設定 Cloudflare worker runtime

// app.ts app.get('/', () => "Hello from Elysia 🦊") // index.ts import { app } from './app'; import type { Context } from 'elysia'; export default { async fetch(request: Request, env: Env, ctx: Context): Promise<Response> { return app .decorate({ env, ctx, }) .handle(request); }, };

建立一個進入檔 index.ts,用 fetch,把 env以參數方式傳入,使用 .decorate,讓之後 context都可以取得 env,如果不知道什麼是 .decorate可以參考第一篇,有基本 ElysiaJS 使用教學。

app.ts 則為本來寫好的App,整個引入就可以。

結論

wrangler cli其實有很多內容,因為涵蓋了 Cloudflare 全部的服務.....有興趣的還是自己開始動手玩,看看哪些用到先學哪一個,這篇主要是導讀 serverless的 runtime要如和跟本來 ElysiaJS 的 app結合在一起以及環境變數怎麼引用。

希望這個三部曲能幫助想要開始接觸 functional programming(FP)、Serverless、ElysiaJS 的人可以有個初步的認識與知道他們之間的關係,自己的經驗分享,不要學程式,要寫程式,而且寫過才會有貓爪在沙發上痕跡般的肌肉記憶,先看一堆教程......不會記得的,現在就開始你自己的 side project吧!

Ekman Hsieh

文字工作者,寫作時間常常在人類與電腦之間拉鋸,相信閱讀,相信文字與思想所構築的美麗境界