Cogita:为 Rspress 打造的开箱即用博客框架

背景:为什么需要 Cogita?

Rspress 是一个性能卓越、功能强大的静态站点生成器 (SSG)。它为我们提供了构建文档站、产品官网等多种类型网站的坚实基础。然而,当我尝试用它来搭建一个功能完备的个人博客时,我发现社区中缺少一个真正“开箱即用”的解决方案。

虽然 Rspress 本身足够灵活,但要从零开始配置一个现代化的博客,开发者仍然需要手动完成大量工作:

  • 主题开发:设计并实现专门的博客布局,如首页文章列表、文章详情页等。
  • 内容管理:需要插件来扫描 Markdown 文件、提取 frontmatter,并生成动态路由。
  • 配置整合:将主题、插件和 Rspress 的各项配置有机地结合起来,确保一切正常工作。

这个过程不仅繁琐,而且对于只想专注于内容创作的开发者来说,门槛也相对较高。

Cogita 的诞生就是为了解决这个问题。它的核心目标是:成为一个基于 Rspress、无需繁琐配置、真正开箱即用的静态博客框架。 你只需要安装它,选择一个喜欢的主题,然后就可以立即开始写作。

架构设计:Cogita 的内在机制

Cogita 的设计哲学是“约定优于配置”,它通过一套精心设计的架构,将博客系统的复杂性封装起来,为用户提供最简洁的接口。

其核心由以下几个部分组成:

  1. @cogita/core: 这是框架的大脑。它作为 Rspress 的一层封装,负责加载用户的 cogita.config.ts 配置文件,并智能地协调主题与插件的工作。它会自动生成最终的 Rspress 配置,让用户无需关心底层细节。

  2. 主题系统 (@cogita/theme-*): Cogita 的主题不仅仅是 UI 皮肤。每个主题都是一个独立的 NPM 包,它包含了预设的布局组件(如首页、文章页)和样式。更重要的是,主题可以声明自己的插件依赖。例如,默认的 @cogita/theme-lucid 主题就依赖了 posts-frontmatter 插件来获取文章列表,而这一切对于终端用户是完全透明的。

  3. 插件系统 (@cogita/plugin-*): 插件负责为框架提供特定的功能。例如,@cogita/plugin-posts-frontmatter 插件会自动扫描你的 posts 目录,提取所有文章的元数据(frontmatter),并通过一个虚拟模块(virtual-posts-data)提供给主题组件使用。这种机制使得主题和功能可以被灵活地组合与扩展。

通过这套架构,Cogita 将主题和功能内聚在一起,实现了真正意义上的“开箱即用”。

实际使用:三步开启你的博客

使用 Cogita 非常简单,你只需要:

  1. 安装依赖:pnpm add @cogita/core @cogita/theme-lucid

  2. 创建配置文件 cogita.config.ts:

    import { defineConfig } from '@cogita/core';
    
    export default defineConfig({
      site: {
        title: '我的博客',
        description: '一个记录思考的地方',
      },
      theme: 'lucid', // 指定使用 lucid 主题
      themeConfig: {
        socialLinks: [
          { icon: 'github', mode: 'link', content: 'https://github.com/your-name' },
        ],
      },
    });
  3. posts 目录下开始撰写你的 Markdown 文章。

就是这样!运行 cogita dev,一个漂亮的博客网站就已经在本地运行起来了。

未来展望:蛮荒阶段与无限可能

Cogita 目前还处于非常早期的“蛮荒阶段”,许多功能仍在探索和开发之中。但这同样也意味着它拥有无限的可能性。在未来的路线图中,我们计划实现以下功能:

  • 更丰富的主题生态:开发和引入更多风格各异的官方及社区主题。
  • 更强大的插件系统:提供评论、全文搜索、SEO 优化、图片懒加载等常用插件。
  • 国际化 (i18n):支持多语言博客的构建。
  • 更完善的开发体验:提供更详细的文档和更友好的错误提示。

Cogita 的愿景是成为 Rspress 生态中最简单、最强大的博客解决方案。如果你对这个项目感兴趣,欢迎关注我们的进展,甚至参与到贡献中来!

敬请期待!