เทมเพลต SvelteKit พร้อมของใช้งานครบสำหรับงานแอปจริง: Routing, Auth, API Proxy, OpenAPI Client, i18n, UI, และ DevX ที่ดี ตั้งค่ามาให้พร้อมใช้งานทันที
src/lib/components/ui
project.inlang/
และไฟล์แปล messages/
openapi-fetch
+ สร้าง Type จาก openapi-typescript
src/
app.html, app.css
hooks.server.ts # รวม middleware: AuthGuard, i18n (Paraglide), FastAPI client
lib/
api/
api.ts # Generic API client
fastapi-client.ts # OpenAPI client ไป proxy /api/proxy
pokemon-api.ts # ตัวอย่าง REST client ภายนอก
paths/fastapi.d.ts # Type ที่ generate จาก OpenAPI
components/ui/... # คอมโพเนนต์ UI (button, card, dropdown, ...)
hooks/
auth-guard.ts # ป้องกัน route กลุ่ม (auth)
fastapi.hook.ts # ยัด client เข้าสู่ event.locals
paraglide/... # ไฟล์ที่ generate จาก Paraglide
schemas/auth.schema.ts # Zod schema สำหรับ Login
utils/
api-core.ts # ApiError
cookies.ts # ตัวเลือก cookie มาตรฐาน
auth.ts # จัดการโทเคน/ตรวจหมดอายุ/ชื่อคุกกี้
routes/
+layout.svelte / +layout.ts
+page.svelte
(auth)/home/+page.svelte # ตัวอย่างหน้าในกลุ่มต้องล็อกอิน
api/proxy/[...slug]/+server.ts # API Proxy + refresh token
demo/
+page.svelte
paraglide/+page.svelte
pokemons/ (ตัวอย่างการเรียก API ภายนอก)
login/
+page.svelte / +page.server.ts / login-form.svelte
รองรับ npm/pnpm/bun เลือกอย่างใดอย่างหนึ่ง (ตัวอย่างใช้ bun) — คำสั่งด้านล่างใช้ได้กับ fish shell
ติดตั้งแพ็กเกจ:
bun install
ตั้งค่า Environment (สำคัญ):
สร้างไฟล์ .env.local
(หรือเซ็ตในระบบของคุณ) อย่างน้อยสองตัวแปรนี้
# ชื่อแอป (แสดงใน <title>)
PUBLIC_APP_TITLE=Sveltekitten
# ต้นทาง Backend API ของคุณ (เช่น FastAPI)
# ใช้ร่วมกับ proxy: /api/proxy/**
BACKEND_API_URL=http://localhost:8000
โหมดพัฒนา:
bun run dev
Build และ Preview โปรดักชัน:
bun run build
bun run preview
ตรวจโค้ด/ลินต์/ฟอร์แมต:
bun run check
bun run lint
bun run format
Generate OpenAPI Types (ต้องมีเซิร์ฟเวอร์ Backend รันที่ BACKEND_API_URL):
# ตัวอย่าง script ที่เตรียมไว้ (ยิงไปที่ http://localhost:8000/openapi.json)
bun run openapi:fastapi
vite dev
vite build
vite preview
svelte-check
prettier --check
+ eslint .
prettier --write .
$env/dynamic/public
)$env/dynamic/private
ใน proxy)ตัวอย่างการตั้งค่าแบบชั่วคราวใน fish shell (ถ้าไม่ใช้ไฟล์ .env):
set -x PUBLIC_APP_TITLE "Sveltekitten"
set -x BACKEND_API_URL "http://localhost:8000"
src/hooks.server.ts
)sequence(...)
ตามลำดับ:(auth)
) ถ้าไม่มี/หมดอายุ refresh token จะเด้งไป /login
event.locals.fastapiClient
/routes/api/proxy/[...slug]/+server.ts
)BACKEND_API_URL/{slug}
พร้อมแนบ Authorization: Bearer <access_token>
ถ้ามี/auth/refresh
เพื่อออก access token ใหม่ แล้วรีทริกคำขอเดิมให้อัตโนมัติ/login
ใช้ Superforms + Zod (loginSchema
) ส่งไปที่ action ใน +page.server.ts
access_token
และ refresh_token
(อายุสั้น/ยาวตามที่กำหนดใน utils/cookies.ts
และ utils/auth.ts
) แล้ว redirect ไป /home
(auth)
(เช่น (auth)/home
)มีให้เลือกสองแบบตามงาน:
src/lib/api/fastapi-client.ts
locals.fastapiClient
(ถูกเตรียมไว้ใน hook) เช่นใน action ของหน้า Login:const result = await locals.fastapiClient.POST('/auth/login', { body: { email, password } });
src/lib/api/api.ts
เพื่อสร้าง client กำหนด baseUrl
เองpokemon-api.ts
เรียก PokeAPI:import { pokemonApi } from '$lib/api/pokemon-api';
const data = await pokemonApi.get('/pokemon', { /* options */ });
messages/
(เช่น en.json
, th.json
)project.inlang/
paraglideVitePlugin
จะ generate โค้ดให้อัตโนมัติลง src/lib/paraglide/
/demo/paraglide
เพิ่มภาษาใหม่แบบคร่าว ๆ:
messages/<lang>.json
project.inlang/settings.json
ตามต้องการ@tailwindcss/vite
(ไม่ต้องมีไฟล์ config แยก)src/lib/components/ui/*
(เช่น button
, card
, dropdown-menu
, ...)+layout.svelte
/demo
หน้ารวมลิงก์/demo/pokemons
ตัวอย่างเรียก REST ภายนอก/login
ตัวอย่างหน้าเข้าสู่ระบบด้วย Superforms + Zod + FastAPI/api/proxy/**
ทดสอบ proxy ไปยัง Backend ของคุณ (ต้องตั้งค่า BACKEND_API_URL
)โปรเจกต์ใช้ @sveltejs/adapter-node
ดังนั้นผลลัพธ์จะเป็นแอป Node.js
bun run build
bun
หรือ node
ผ่าน preview):bun run preview
หรือคุณอาจตั้งค่าโปรเซสจัดการด้วย PM2/Docker ตามสภาพแวดล้อมของคุณ โดยตั้ง ENV BACKEND_API_URL
ในเครื่องปลายทางด้วย
refresh_token
ยังไม่หมดอายุ และจุดออกโทเคน /auth/refresh
ของ Backend ทำงานถูกต้อง/api/proxy/**
เพื่อลด CORS ฝั่งเบราว์เซอร์bun run openapi:fastapi
ใหม่หลัง Backend เปลี่ยนสคีมาaccess_token
, refresh_token
dev เริ่มโหมดพัฒนา
build สร้างไฟล์โปรดักชัน
preview เปิดรันโปรดักชันแบบโลคอล
check ตรวจ type และ Svelte
lint ตรวจโค้ดด้วย prettier + eslint
format จัดรูปแบบโค้ดด้วย prettier
openapi เรียก openapi-typescript
ขอให้สนุกกับการพัฒนา! หากต้องการเพิ่มเอกสาร/ตัวอย่างเพิ่มเติม แจ้งไว้ใน Issues/PR ได้เลย