从 6.3 发布情报 1,6.30 发布情报 2,时隔 4 个月,我可以很自豪地说:Serenade 终于可以发布了。

开源地址:https://github.com/dyedd/serenade

动静结合:不是折中,是分工 #

静态博客的美,在于轻;动态博客的美,在于活。

Serenade 想做的不是站队,而是把两件事拆开,让它们各自纯粹:

  • 内容:永远是文件(Markdown / JSON),安静地躺在 content/
  • 发布:你可以选择静态导出,也可以选择 Node 运行

于是,“动静结合”就变成一个很具体的结构:

  • 静:content/ 作为唯一内容源,不依赖数据库
  • 动:Node 运行时读取这些文件,SSR 渲染页面,并提供搜索、RSS 朋友圈等能力

两种部署方式 #

1) Node:构建一次,内容常新 #

nuxt build 得到 .output,服务端在运行时读取 content/

这意味着:

  • 首次发布:同步 .output/ + content/
  • 后续只改文章、友链、项目:同步 content/,无需重新 build

写作回到最朴素的动作:改文件;更新回到最直接的动作:同步文件。

2) generate:0 服务器,把当下定格成静态文件 #

nuxt generate 导出 dist/,交给任意静态托管即可。

它同样优雅,只是规则更清晰:

  • 更新内容需要重新 generate(可以 CI 自动化)
  • RSS 拉取、服务端搜索等“运行时能力”在纯静态模式下会受限

相对静态 / 动态博客的优势 #

  • 对静态博客:在 Node 模式下,更新不必反复编译;需要 0 服务器时仍可静态导出
  • 对动态博客:不需要数据库,内容 Git 友好;迁移与备份都更轻
  • 对写作者:内容与发布解耦,你可以用同一份内容,选择不同的落地方式

功能 #

  1. 个人主页(开发中)
  2. 文章系统:兼容 Hexo 等静态博客的目录化结构,迁移成本低
  3. 专栏 / 知识库:兼容 VuePress 风格的组织方式
  4. 友链 / 朋友圈:除了展示,我更喜欢直接看到订阅的 RSS 信息
  5. AI 辅助:生成 URL slug、生成文章配图(可选)
  6. ……更多功能还在路上

技术栈 #

  • 框架:Nuxt
  • 前端:Vue 3 + Composition API
  • 样式:TailwindCSS
  • Markdown:marked + gray-matter
  • 数学公式:KaTeX
  • 构建工具:Vite
  • 部署:支持静态导出与 Node 运行

界面 #

由于还在开发,所以界面可能会有一些调整。

首页:

文章列表:

文章详情页:

专栏列表:

专栏详情页:

友链:

朋友圈:

其它 #

欢迎试用。如果喜欢,欢迎 Star 和 PR,谢谢。

如需交流,欢迎加 QQ 群:972781001