跳到正文
艾影✦流浪

一个本地优先博客的搭建笔记

约 2 分钟 5 次阅读

这是一篇演示文章,用来展示博客的排版与功能。你可以在后台编辑、替换或删除它。

这个博客的第一条原则是:在自己的电脑上就能完整运行。写文章、改设置、上传图片、备份数据,都不应该依赖某个需要注册的在线服务。

技术选型#

关注点 选择 理由
框架 Next.js(App Router) 前台与后台在同一个项目里,服务端渲染对 SEO 友好
语言 TypeScript 数据结构在编译期就能对上
样式 Tailwind CSS + 少量手写 CSS 设计令牌集中管理,深浅色切换简单
数据 Node 内置的 SQLite 无需安装数据库,也无需编译原生模块
搜索 SQLite FTS5 三元组索引 中文无需分词也能检索

数据层与页面分离#

所有 SQL 都收拢在 lib/repo 目录,页面只调用类似 listPosts()、getPostBySlug() 这样的函数:

// app/posts/[slug]/page.tsx
const post = getPostBySlug(slug);
if (!post) notFound();
const { html, toc } = await renderMarkdown(post.content);

将来如果要部署到不提供持久磁盘的平台,只需要把这一层换成托管数据库的实现,页面代码不用动。

迁移只追加,不修改#

数据库结构通过版本化的迁移脚本维护。每次升级前,程序会先自动给现有数据库拍一个快照:

VACUUM INTO 'data/backups/auto-before-migrate-v1.sqlite';

这样即使升级出了问题,文章也能原样找回来。

一些取舍#

  • 不做可视化页面搭建器。常用设置集中在后台的「站点设置」里,够用就好。
  • Markdown 中的原始 HTML 不渲染。写作时少了一点自由,换来的是不必担心粘贴进来的内容带有脚本。
  • 动效克制。首页有一次完整的入场,其余地方只在你操作时给出反馈。

下一篇会写中文全文搜索是怎么做的。

推荐阅读

评论

还没有评论。读完有想法的话,写在下面吧。