多子站点架构

Lynx 网站作为一个“迷你子站点”(例如 LynxReactLynxRspeedy)的集合运行,这些子站点都位于同一个仓库中。这种架构允许每个子站点拥有自己的身份(Logo、主页、侧边栏),同时共享公共文档和基础设施。

配置

子站点的中心配置位于 shared-route-config.ts。此文件作为单一事实来源:

  1. 子站点元数据:定义可用子站点的列表。
  2. 共享路由:定义哪些文档部分在子站点之间共享。

SubsiteConfig

每个子站点由 SubsiteConfig 对象定义:

export type SubsiteConfig = {
  value: string; // 唯一 ID (例如 'guide')
  label: string; // 显示名称 (例如 'Lynx')
  description: string; // 简短描述
  home: string; // 根路径 (例如 '/')
  url: string; // 落地页 URL
  logo: {
    // Logo 资源
    light: string;
    dark: string;
  };
};

添加新子站点

要添加新子站点(例如 my-framework):

  1. 创建目录:创建 docs/en/my-framework/(和 docs/zh/my-framework/)。
  2. 更新配置:在 shared-route-config.tsSUBSITES_CONFIG 中添加新条目。
    {
      value: 'my-framework',
      label: 'My Framework',
      // ...
    }
  3. 配置侧边栏:创建 docs/en/my-framework/_meta.json 以定义其特定的侧边栏结构。

共享文档

为了避免在多个子站点之间重复内容(如“快速上手”指南),我们使用共享文档系统。

工作原理

  1. 事实来源:共享文件物理位置在 docs/en/guide/start/
  2. 虚拟路由rspress.config.ts 中的 sharedSidebarPlugin 动态地为其他子站点创建虚拟页面(例如 react/start/quick-start),指向相同的内容。
  3. 统一侧边栏BeforeSidebar 组件(在 theme/BeforeSidebar.tsx 中)自动将共享的“开始”部分注入每个子站点的侧边栏。

管理共享内容

要修改哪些文件被共享,请更新 shared-route-config.ts 中的 SHARED_DOC_TITLES

const SHARED_DOC_TITLES = {
  'quick-start': { en: 'Quick Start', zh: '快速上手' },
  // ...
};

子站点 UI

子站点导航和身份由自定义主题组件处理:

  • SubsiteSelect (theme/BeforeSidebar.tsx):侧边栏顶部的下拉菜单允许用户在子站点之间切换。
  • SubsiteLogo (theme/subsite-ui.tsx):渲染当前子站点和主题模式的正确 Logo。

这些组件直接从 SUBSITES_CONFIG 读取,因此其中的任何更改都会立即反映在 UI 中。

除非另有说明,本项目采用知识共享署名 4.0 国际许可协议进行许可,代码示例采用 Apache License 2.0 许可协议进行许可。