YEN HARVEY
cd ../notes

开发日志

把博客搬到 SvelteKit + Cloudflare

4 min read
夜色中的开发者桌面,屏幕映出代码微光。
夜色中的开发者桌面,屏幕映出代码微光。

这个博客几经重做——从 2020 年的一个 WordPress 站点,一路折腾到现在这套 SvelteKit + Cloudflare 的静态架构。这篇记录最近这次重构的选型:目标很简单——静态、快、好维护,顺便把所有可用的内容组件都演示一遍。

选型

  • SvelteKit + adapter-cloudflare:整站预渲染成静态资源,部署到 Cloudflare Workers。
  • Markdown + mdsvex:文章就是 .md 文件,还能在正文里嵌 Svelte 组件。
  • Tailwind v4 + Shiki:设计 token 集中管理,代码块构建期高亮。

核心配置其实就两个文件:

import adapter from '@sveltejs/adapter-cloudflare';

export default {
	kit: { adapter: adapter() }
};
{
	"name": "atlas",
	"main": ".svelte-kit/cloudflare/_worker.js",
	"compatibility_date": "2026-05-29"
}

一张图看懂构建流程

flowchart LR
    A[".md 文章"] --> B["mdsvex"]
    B --> C{"代码块?"}
    C -->|"普通"| D["Shiki 高亮"]
    C -->|"mermaid"| E["客户端渲染 SVG"]
    B --> F["预渲染 prerender"]
    D --> F
    F --> G["Cloudflare Workers"]

mermaid 围栏写流程图即可:构建期留占位,客户端按当前明暗主题渲染成 SVG(库按需懒加载,没有图的页面不会引入它)。

写作体验

加一篇文章 = 往 content/notes/ 丢一个 .md,列表、首页、归档、目录全自动更新。

开阔晴空下仰望白云的人物
这是 Figure 组件:带图注的配图。
点开看:目录是怎么来的
正文里的 `##` / `###` 标题会被自动抓取生成右侧目录,并用 01/02 编号。这个折叠块就是 Spoiler 组件。

灵感氛围

写代码时的背景音,大概就是这种 lo-fi 的安静:

之后

慢慢把灵感、实验和过去都沉淀进来——少一点魔法,多一点确定性。

作者头像
yen@harvey:~$ exit 0