F FisherHub Docs

01. 入门指南

SvelteKit 是基于 Svelte 的全栈 Web 框架。与 React 或 Vue 不同,Svelte 是一个编译器,它在构建时将组件编译为高效的原生 JavaScript,而非在浏览器中进行虚拟 DOM diff。SvelteKit 在此之上提供了路由、服务端渲染、静态生成等功能。

Svelte 响应式基础

在 Svelte 5 中,响应式通过运行符(runes)实现。它们是显式的编译器指令,用 $ 前缀标识。

$state — 声明响应式状态

$state 是声明响应式变量的基本方式。

<script lang="ts">
  let count = $state(0);
</script>

<button onclick={() => count++}>
  点击次数: {count}
</button>

count 变化时,所有引用它的 DOM 都会自动更新。

$derived — 派生值

$derived 基于已有状态计算新值,且当依赖变化时自动重新计算。

<script lang="ts">
  let width = $state(50);
  let height = $state(100);
  let area = $derived(width * height);
</script>

<p>宽度: {width}px</p>
<p>高度: {height}px</p>
<p>面积: {area}px²</p>

$derived 是只读的,你不能直接给它赋值。

$effect — 副作用

当需要响应状态变化执行副作用(如访问 localStorage、发送分析事件)时,使用 $effect

<script lang="ts">
  let theme = $state('light');

  $effect(() => {
    document.documentElement.dataset.theme = theme;
    localStorage.setItem('theme', theme);
  });
</script>

<select bind:value={theme}>
  <option value="light">亮色</option>
  <option value="dark">暗色</option>
</select>

初始化项目

使用 bun create 命令快速创建 SvelteKit 项目:

bun create svelte my-app
cd my-app
bun install

在交互式提示中,你可以选择:

  • Skeleton project — 最小化模板
  • Demo app — 包含示例代码的演示项目
  • Library project — 用于构建 Svelte 库

推荐初学者选择 Skeleton project,然后逐步添加功能。

目录结构

my-app/
├── src/
│   ├── routes/       ← 文件路由(核心)
│   │   └── +page.svelte
│   ├── lib/          ← 公共工具和组件
│   │   └── utils.ts
│   └── app.html      ← HTML 模板
├── static/           ← 静态资源(直接服务)
├── svelte.config.js  ← SvelteKit 配置
├── vite.config.ts    ← Vite 配置
└── package.json

关键目录说明:

  • src/routes/ — 每个文件对应一个路由,遵循文件系统路由约定
  • src/lib/ — 存放可复用组件和工具函数,通过 $lib 别名引用
  • static/ — 该目录下的文件会原样部署(如 favicon.ico、robots.txt)

创建第一个页面

src/routes/+page.svelte 是应用的首页:

<script lang="ts">
  let name = $state('SvelteKit');
</script>

<h1>你好,{name}!</h1>
<p>这是你的第一个 SvelteKit 页面。</p>

<input bind:value={name} placeholder="输入名称" />

运行开发服务器

bun run dev

默认访问 http://localhost:5173。如需修改端口或允许局域网访问:

bun run dev --port 3000 --host

目录路由

src/routes/ 下新建文件夹,即可创建嵌套路由:

src/routes/
├── +page.svelte      → /
├── about/
│   └── +page.svelte  → /about
└── blog/
    └── +page.svelte  → /blog

每个 +page.svelte 文件对应一个路由地址。文件夹深度决定 URL 路径深度。

总结

本章你学会了:

  • Svelte 5 的三个核心运行符:$state$derived$effect
  • 使用 bun create svelte 初始化项目
  • SvelteKit 的标准目录结构
  • 文件系统路由的基本规则
  • 启动开发服务器

下一章将深入路由的进阶用法:动态参数、布局组件和数据加载。