用途:这是一份 Svelte 5 与 SvelteKit 的框架模式参考,适用于全栈 Web 应用、静态站点、渐进增强、SSR/SSG、需要较小打包体积的项目,以及从 Svelte 4 迁移到 5。不适合已深度绑定 React/Vue 生态、或依赖仅其他框架才有的第三方组件库的团队。
主要能力:Svelte 是基于编译器的 UI 框架,将工作从运行时转移到构建时,产出较少 JavaScript,不使用虚拟 DOM。Svelte 5 引入 runes 实现显式细粒度响应式;SvelteKit 在其上提供基于文件的路由、服务端渲染和部署适配器。
常用语法:响应式状态 let count = $state(0);派生状态 const double = $derived(count * 2),复杂派生用 $derived.by(() => { ... });副作用 $effect(() => { ... });组件属性 let { name, age = 25 } = $props();可绑定属性 $bindable();开发调试 $inspect(value)。snippets 用 {#snippet name(params)}...{/snippet} 定义、{@render name(args)} 渲染,替代 slots;事件用 onclick 属性替代 on:click;each 块应加 key;await 块支持内联异步渲染。
SvelteKit:+page.server.ts 中的 load 仅服务端运行可访问数据库与密钥,+page.ts 中的 load 在服务端和客户端运行;+page.server.ts 中的 actions 配合 use:enhance 实现渐进增强;+layout.svelte / +layout.server.ts 提供共享 UI 与数据;src/hooks.server.ts 的 handle() 用于请求中间件、鉴权和重定向;+error.svelte 为每个路由提供错误边界;适配器包括 adapter-auto、adapter-node、adapter-static;+server.ts 提供独立 API 路由;页面选项如 export const prerender = true 控制 SSR/CSR/预渲染;共享状态可在 .svelte.ts 模块中用 $state(),大数据可用 $state.raw(data) 退出深层代理。
限制与常见错误:$state 会深层代理对象,大只读数据宜用 $state.raw();$props() 解构仅在声明处进行以保留响应性;$effect 的依赖读取需无条件执行;清理函数需从 $effect 返回函数;Svelte 5 组件统一使用 onclick;新代码用 .svelte.ts 模块中的 $state() 替代 stores;each 块始终加键;load 函数不能从 .svelte 文件导出;布局中父级 load 需 await parent();服务端 load 中不要用 goto(),应用 @sveltejs/kit 的 redirect(303, '/path')。若存在 tailwind、vitest-testing、playwright、drizzle-orm、vite 等相关技能,可将对应领域模式委派给它们。官方文档网址与具体价格信息暂未提供。