博客架构
我怎么搭这套博客
这篇主要是我给自己做的一次整理。现在回头看,这个博客最重要的不是某个炫技效果,而是它终于变成了一套我真的会用、也愿意继续维护的东西。
最开始我只是想要一个能写文章的地方,后来慢慢加了日记、相册、学习记录,再往后又加了编辑器、项目展示和一些站点设置。东西一多,最怕的不是功能不够,而是结构开始散。于是我把它收回到几个明确的层次里:
我现在怎么分层
我尽量让前台展示和后台编辑分开。前台负责看,后台负责写,内容本身再单独放一层。
- 前台:
src/pages/,负责首页、博客、项目、日记、相册这些页面 - 布局:
src/layouts/Layout.astro,负责统一壳子、主题和全局资源 - 组件:
src/components/,放导航和页脚这种重复使用的东西 - 内容:
src/content/,放博客文章和各类 JSON 数据 - 配置:
site-data.json和src/site.config.ts,放站点信息 - 服务:
server.mjs,负责编辑器 API、上传、构建触发这些事情
这样做的好处很直接,改页面时不会顺手把数据层弄乱,改内容时也不用反过来碰展示层。
我选的技术
这套站点主要还是围绕 Astro 搭的。
| 层面 | 选择 |
|---|---|
| 框架 | Astro |
| 语言 | TypeScript |
| 内容格式 | MDX |
| 页面样式 | 纯 CSS + 少量全局变量 |
| 图标 | Lucide |
| 数据配置 | site-data.json |
| 编辑方式 | 自建 editor |
我没有去上太重的前端状态管理,也没有把博客做成一个复杂 Web App。对我来说,博客首先是内容载体,不是应用市场里的一个产品。结构清楚、能稳定写、能持续改,就够了。
为什么是这种结构
这里面有几个我自己比较在意的点。
第一是内容要尽量直接。文章还是放 MDX,日记、学习、相册这些则用 JSON。这样我写东西的时候不会被太多层包装卡住,也方便编辑器直接读写。
第二是配置不要散。站点名称、社交链接、头像、简介这些我统一放在 site-data.json,不再零散地写进各个页面里。这样改一次,整站就跟着走。
第三是编辑器要真的能用。很多博客后台最后会变成“有但不用”的东西,我不想让它这样。所以我把编辑器做成了一个可以直接改博客内容的入口,文章、日记、相册、学习记录都从同一套 API 进出。
现在这套结构的样子
大致上可以理解成这样:
前台页面 -> 读内容/读配置 -> 渲染成站点
编辑器 -> 调 API -> 改内容/改配置 -> 触发构建
我比较喜欢这种闭环。写完一篇文章,或者改完站点设置,不需要切很多工具,内容最终还是会回到博客本身。
我现在更在意什么
以前我会更在意页面看起来够不够“有设计感”,现在更在意三件事:
- 打开速度别太慢
- 文章页要好读
- 以后我自己再回来改的时候,不要看半小时才知道哪里放了什么
这也是为什么我后来把很多视觉效果收了一点。现在的主题已经不是那种偏重赛博感的方向了,我更希望它看起来清爽、克制一点,重点还是内容。
我给自己的结论
如果只用一句话概括这套博客,我会说它不是一个“做完了的作品”,而是一个我可以一直往里写东西的地方。
它现在的架构不算复杂,但足够让我继续加内容、继续改样式、继续折腾新东西。对个人博客来说,这其实就挺好了。