返回文章列表

博客架构

我怎么搭这套博客

这篇主要是我给自己做的一次整理。现在回头看,这个博客最重要的不是某个炫技效果,而是它终于变成了一套我真的会用、也愿意继续维护的东西。

最开始我只是想要一个能写文章的地方,后来慢慢加了日记、相册、学习记录,再往后又加了编辑器、项目展示和一些站点设置。东西一多,最怕的不是功能不够,而是结构开始散。于是我把它收回到几个明确的层次里:

我现在怎么分层

我尽量让前台展示和后台编辑分开。前台负责看,后台负责写,内容本身再单独放一层。

  • 前台:src/pages/,负责首页、博客、项目、日记、相册这些页面
  • 布局:src/layouts/Layout.astro,负责统一壳子、主题和全局资源
  • 组件:src/components/,放导航和页脚这种重复使用的东西
  • 内容:src/content/,放博客文章和各类 JSON 数据
  • 配置:site-data.jsonsrc/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 -> 改内容/改配置 -> 触发构建

我比较喜欢这种闭环。写完一篇文章,或者改完站点设置,不需要切很多工具,内容最终还是会回到博客本身。

我现在更在意什么

以前我会更在意页面看起来够不够“有设计感”,现在更在意三件事:

  1. 打开速度别太慢
  2. 文章页要好读
  3. 以后我自己再回来改的时候,不要看半小时才知道哪里放了什么

这也是为什么我后来把很多视觉效果收了一点。现在的主题已经不是那种偏重赛博感的方向了,我更希望它看起来清爽、克制一点,重点还是内容。

我给自己的结论

如果只用一句话概括这套博客,我会说它不是一个“做完了的作品”,而是一个我可以一直往里写东西的地方。

它现在的架构不算复杂,但足够让我继续加内容、继续改样式、继续折腾新东西。对个人博客来说,这其实就挺好了。