SvelteKit روی Cloudflare Workers با Hyperdrive
خلاصهٔ کاملتر
آدام رکیس تو ادامهٔ سری مطالبش دربارهٔ Cloudflare، این بار سراغ راهاندازی یه اپ SvelteKit روی Workers رفته. به گفتهٔ نویسنده یکپارچگی SvelteKit با کلادفلر به نرمیِ TanStack Start نیست، ولی بازم عالیه و با چندتا ترفند سریع راه میافته. ورکرها مثل توابع ابری AWS Lambda روی تقاضا بالا میان، با این تفاوت که کولد استارتشون عملاً صفره.
محدودیت اصلیشون اینه که نمیتونی آبجکتهای I/O طولانیمدت رو بین ریکوئستها زنده نگه داری؛ یعنی نمیشه یه آبجکت db متصل به دیتابیس رو از یه ماژول export کرد. باز کردن اتصال TCP تازه تو هر ریکوئست هم کنده و هم دیتابیس رو زیر فشار میبره. Hyperdrive جواب کلادفلر به همین مشکله: یه استخر از اتصالهای از پیش گرمشده که ورکر فوری بهش وصل میشه.
برای شروع، اپ با npx sv create . ساخته میشه و npx wrangler deploy زیرساخت کلادفلر رو راه میندازه. نویسنده به یه دردسر اشاره میکنه: اسکریپت build که کلادفلر میسازه wrangler types --check رو هم اجرا میکنه و بیلد رو با خطای «Types file not found» میشکنه. اجرای npx wrangler types درستش میکنه، ولی به نظر نویسنده بهتره اون --check رو کلاً از اسکریپت بیلد برداری.
تو SvelteKit، آبجکت env کلادفلر — سکرتها و رشتهٔ اتصال Hyperdrive — روی آبجکت platform میشینه و تو کانتکستهای فقط-سرور مثل page.server.ts در دسترسه. تو universal loaderها کار نمیکنه، چون اونا سمت کلاینت هم اجرا میشن. تو Remote Functionها هم با getRequestEvent از $app/server به همون platform و locals میرسی.
جای درستِ ساختن خود اتصال، فایل src/hooks.server.js و تابع handle اونه که در هر ریکوئست یه بار صدا زده میشه: اونجا Pool رو با رشتهٔ اتصال Hyperdrive میسازی و db رو روی event.locals میذاری تا لودرهای سرور و ریموت فانکشنها بهش دسترسی داشته باشن.
export async function handle({ event, resolve }) {
const pool = new Pool({
connectionString: event.platform!.env.HYPERDRIVE.connectionString,
});
event.locals.db = getDb(pool);
return await resolve(event);
}نکات کلیدی:
- ورکرهای کلادفلر کولد استارت تقریباً صفر دارن، ولی اجازهٔ نگهداشتن اتصال بین ریکوئستها رو نمیدن.
- Hyperdrive با استخر اتصالهای گرم، هزینهٔ اتصال تازه در هر ریکوئست رو حذف میکنه.
- wrangler types --check تو اسکریپت بیلد شکنندهست و نویسنده حذفش رو پیشنهاد میده.
- env کلادفلر فقط تو کانتکستهای سمت سرور و از طریق platform در دسترسه.
- هوک handle تو src/hooks.server.js جای ساخت اتصال و گذاشتنش روی event.localsه.




