603 字
3 分鐘
Svelte 5 + Vite 快速開發指南
為什麼選擇 Svelte 5?
Svelte 5 帶來革命性的 Runes 語法,讓響應式開發更加直覺:
- 編譯時期優化,執行效能極佳
- 無虛擬 DOM,更新效率高
- 語法簡潔,學習曲線平緩
- 套件體積小
專案初始化
# 建立 Svelte 5 + Vite 專案npm create vite@latest my-app -- --template svelte
# 進入專案目錄cd my-app
# 安裝相依套件npm install
# 啟動開發伺服器npm run devSvelte 5 Runes 語法
$state - 響應式狀態
<script> // Svelte 5 使用 $state let count = $state(0); let user = $state({ name: '', email: '' });
function increment() { count++; // 直接修改即可 }</script>
<button onclick={increment}> 點擊次數:{count}</button>$derived - 衍生狀態
<script> let price = $state(100); let quantity = $state(1);
// 自動計算的衍生值 let total = $derived(price * quantity); let discount = $derived(total > 500 ? total * 0.1 : 0); let finalPrice = $derived(total - discount);</script>
<p>總價:{total}</p><p>折扣:{discount}</p><p>應付:{finalPrice}</p>$effect - 副作用處理
<script> let searchTerm = $state(''); let results = $state([]);
// 監聽變化執行副作用 $effect(() => { if (searchTerm.length > 2) { fetchResults(searchTerm).then(data => { results = data; }); } });</script>
<input bind:value={searchTerm} placeholder="搜尋..." />Vite 設定
vite.config.js
import { defineConfig } from 'vite';import { svelte } from '@sveltejs/vite-plugin-svelte';
export default defineConfig({ plugins: [svelte()], server: { port: 3000, proxy: { '/api': { target: 'http://localhost:8069', changeOrigin: true } } }, build: { outDir: 'dist', minify: 'esbuild' }});環境變數
VITE_API_URL=http://localhost:8069VITE_LIFF_ID=1234567890-abcdefgh// 使用環境變數const apiUrl = import.meta.env.VITE_API_URL;整合 Tailwind CSS
npm install -D tailwindcss postcss autoprefixernpx tailwindcss init -pexport default { content: ['./src/**/*.{html,js,svelte}'], theme: { extend: {} }, plugins: []};<!-- 使用 Tailwind --><button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"> 按鈕</button>元件設計模式
Props 與事件
<script> let { label, variant = 'primary', onclick } = $props();
const variants = { primary: 'bg-blue-500 text-white', secondary: 'bg-gray-200 text-gray-800', danger: 'bg-red-500 text-white' };</script>
<button class={variants[variant]} {onclick}> {label}</button>使用元件
<script> import Button from './Button.svelte';
function handleClick() { console.log('clicked!'); }</script>
<Button label="送出" onclick={handleClick} /><Button label="取消" variant="secondary" /><Button label="刪除" variant="danger" />API 整合
const API_URL = import.meta.env.VITE_API_URL;
export async function fetchData(endpoint) { const response = await fetch(`${API_URL}${endpoint}`); if (!response.ok) throw new Error('API Error'); return response.json();}
export async function postData(endpoint, data) { const response = await fetch(`${API_URL}${endpoint}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); return response.json();}專案結構
src/├── lib/│ ├── api.js # API 封裝│ └── utils.js # 工具函數├── components/│ ├── Button.svelte│ ├── Card.svelte│ └── Modal.svelte├── pages/│ ├── Home.svelte│ └── Detail.svelte├── App.svelte└── main.js建構與部署
# 建構生產版本npm run build
# 預覽建構結果npm run previewSvelte 5 + Vite 的組合提供了極佳的開發體驗與效能表現,非常適合建構現代化的 Web 應用。
部分資訊可能已經過時