从 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 友好;迁移与备份都更轻
- 对写作者:内容与发布解耦,你可以用同一份内容,选择不同的落地方式
功能 #
- 个人主页(开发中)
- 文章系统:兼容 Hexo 等静态博客的目录化结构,迁移成本低
- 专栏 / 知识库:兼容 VuePress 风格的组织方式
- 友链 / 朋友圈:除了展示,我更喜欢直接看到订阅的 RSS 信息
- AI 辅助:生成 URL slug、生成文章配图(可选)
- ……更多功能还在路上
技术栈 #
- 框架:Nuxt
- 前端:Vue 3 + Composition API
- 样式:TailwindCSS
- Markdown:marked + gray-matter
- 数学公式:KaTeX
- 构建工具:Vite
- 部署:支持静态导出与 Node 运行
界面 #
由于还在开发,所以界面可能会有一些调整。
首页:

文章列表:

文章详情页:

专栏列表:

专栏详情页:

友链:

朋友圈:

其它 #
欢迎试用。如果喜欢,欢迎 Star 和 PR,谢谢。
如需交流,欢迎加 QQ 群:972781001
