跳转到内容
关系图谱

02_docusaurus

1,976 字 7 分钟

Docusaurus 深度笔记(增强版) ​

1. 一句话定位 ​

Docusaurus 是面向“产品级文档门户”的 React 方案,强项是版本化、国际化、组件化扩展和生态完整度。


2. 设计哲学与适用边界 ​

2.1 设计哲学 ​

  1. 文档不是静态文件集合,而是可持续演进的产品
  2. 内容与交互并重,MDX 提供表达上限
  3. 内建平台能力(i18n、versioning、blog)降低二次开发成本

2.2 适用边界 ​

适合:

  1. 官方产品文档门户
  2. SDK/API 文档体系
  3. 需要多语言和多版本并行维护的团队

不适合:

  1. 只想快速上线轻量文档,不愿维护前端工程
  2. 团队对 React/Node 完全陌生且短期无学习预算

3. 能力地图(Capability Map) ​

能力表现说明
内容表达强Markdown + MDX,支持组件化叙事
信息架构强多文档集、侧边栏、版本/语言组合导航
搜索强Algolia 生态成熟,本地方案可选
i18n强官方完整流程,支持路由和内容本地化
版本化强官方内建,适合长期演进文档
主题扩展强组件重写能力高
插件生态强大量社区插件与实战案例
维护成本中高工程复杂度高于纯 Markdown 方案

4. 架构与构建机制 ​

4.1 构建流程 ​

  1. 读取 docusaurus.config.* 与插件配置
  2. 解析 docs/blog/pages 内容源
  3. 执行插件生命周期(content loaded, routes generated)
  4. 生成静态页面与资源
  5. 输出 build/ 目录用于托管

4.2 常用命令 ​

  • npm run start:开发模式
  • npm run build:生产构建
  • npm run serve:本地预览构建产物
  • npm run swizzle:主题组件定制

5. 推荐目录结构 ​

text
my-docs/
  docs/
    intro.md
    guides/
    reference/
  blog/
  src/
    css/custom.css
    pages/
  i18n/
    zh-Hans/
    en/
  docusaurus.config.js
  sidebars.js

建议:

  1. docs/ 放稳定知识结构
  2. blog/ 放时间线内容
  3. i18n/ 按语言分层管理翻译资产
  4. src/pages/ 放非文档落地页(about/pricing/community)

6. 配置详解(工程实践版) ​

js
import { themes as prismThemes } from "prism-react-renderer";

export default {
  title: "Engineering Docs",
  tagline: "Public learning notes",
  url: "https://example.com",
  baseUrl: "/",
  favicon: "img/favicon.ico",
  organizationName: "your-org",
  projectName: "your-project",
  onBrokenLinks: "throw",
  onBrokenMarkdownLinks: "warn",

  i18n: {
    defaultLocale: "zh-Hans",
    locales: ["zh-Hans", "en"],
  },

  presets: [
    [
      "classic",
      {
        docs: {
          sidebarPath: "./sidebars.js",
          routeBasePath: "/docs",
          editUrl: "https://github.com/your-org/your-project/edit/main/",
          showLastUpdateTime: true,
          showLastUpdateAuthor: true,
        },
        blog: {
          showReadingTime: true,
          blogSidebarCount: 20,
        },
        theme: {
          customCss: "./src/css/custom.css",
        },
      },
    ],
  ],

  themeConfig: {
    navbar: {
      title: "Docs",
      items: [
        { to: "/docs/intro", label: "文档", position: "left" },
        { to: "/blog", label: "博客", position: "left" },
        { type: "localeDropdown", position: "right" },
      ],
    },
    prism: {
      theme: prismThemes.github,
      darkTheme: prismThemes.dracula,
    },
  },
};

关键点:

  1. onBrokenLinks=throw 建议在 CI 强制开启
  2. editUrl 显著降低外部贡献门槛
  3. routeBasePath 明确文档入口,利于 SEO 与站点结构治理

7. 内容工程规范 ​

7.1 Frontmatter 推荐字段 ​

yaml
---
id: docusaurus-selection
title: Docusaurus 选型指南
description: 平台级文档能力拆解
slug: /guides/docusaurus-selection
tags: [docs, docusaurus, i18n]
---

7.2 MDX 使用边界建议 ​

  1. 文档正文优先 Markdown,保证可移植性
  2. 只在“确有交互价值”时使用 MDX 组件
  3. 将通用组件沉淀到 src/components,避免页面内复制粘贴

8. 搜索体系设计 ​

8.1 方案选择 ​

  1. 小中型站:本地搜索插件可先满足
  2. 中大型站:优先 Algolia,支持更高质量召回与排序

8.2 搜索质量优化 ​

  1. 标题命名规范化
  2. Frontmatter 增加 keywords
  3. 长文拆节并增加语义化小标题
  4. 保证中英文术语一致(术语表)

9. i18n 实操策略 ​

9.1 路由策略 ​

  1. defaultLocale 是否显示前缀要在项目初期确定
  2. 每个 locale 保持相同目录结构

9.2 翻译工作流 ​

  1. 原文提交后自动生成待翻译任务
  2. 翻译 PR 与原文 PR 解耦,避免相互阻塞
  3. 发布前检查“缺失翻译率”并出报告

9.3 常见问题 ​

  1. 组件文案漏翻:将文案抽离到 locale 文件
  2. 锚点不一致:统一标题翻译规则

10. 版本化实操策略 ​

10.1 推荐场景 ​

  1. SDK/API 文档
  2. 企业产品多版本并行维护
  3. 历史版本有长期访问价值

10.2 版本治理建议 ​

  1. 定义 LTS 与 Current 版本策略
  2. 每个版本明确维护窗口
  3. 退役版本提供迁移指引页

10.3 发布流程建议 ​

  1. 发布分支触发版本切割
  2. 自动更新版本索引页
  3. 版本发布后执行链接完整性检查

11. 主题与组件定制 ​

11.1 定制层级 ​

  1. CSS 覆盖
  2. themeConfig 配置
  3. 局部 Swizzle
  4. 深度 Swizzle(最后手段)

11.2 可维护性原则 ​

  1. 记录每个 Swizzle 的业务理由
  2. 升级前先跑对比构建
  3. 自定义组件单独写测试快照(若项目有测试基础)

12. 插件生态与治理 ​

常见插件方向:

  1. 本地搜索
  2. 图片放大与媒体增强
  3. Mermaid/数学公式
  4. SEO 增强
  5. sitemap 和 feed

治理建议:

  1. 插件数量控制在“必要最小集”
  2. 每次新增插件评估维护者活跃度与版本兼容性
  3. 建立升级日历,避免一次跨多个大版本

13. 性能优化与可访问性 ​

13.1 性能优化 ​

  1. 控制 MDX 组件复杂度
  2. 对大图与示意图做压缩
  3. 限制第三方脚本数量
  4. 分析首屏 JS 体积

13.2 可访问性 ​

  1. 颜色对比度达标
  2. 标题结构有序
  3. 图片有替代文本
  4. 键盘导航可用

14. SEO 与分析体系 ​

  1. 每页唯一标题和描述
  2. 维护 canonical,避免重复内容
  3. 生成 sitemap 并提交搜索引擎
  4. 建立指标看板:流量、跳出、站内搜索词、热门入口

建议每月基于“搜索失败词”更新内容计划。


15. CI/CD 与部署模板 ​

15.1 GitHub Actions 示例 ​

yaml
name: docusaurus
on:
  push:
    branches: [main]
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - run: npm run build

15.2 部署策略 ​

  1. PR 环境预览
  2. 主分支自动发布
  3. 发布失败保留上一个稳定版本

16. 安全与治理 ​

  1. 锁定依赖并启用安全扫描
  2. 避免在 MDX 中注入不受信任脚本
  3. 对外链脚本使用最小权限和完整性校验
  4. 维护内容审阅规则,防止误发布敏感信息

17. 迁移路线图 ​

17.1 从纯 Markdown 迁移到 Docusaurus ​

  1. 先迁内容,不先迁样式
  2. 建立 sidebars 结构
  3. 上线后再补 i18n 与 versioning

17.2 从其他文档框架迁移 ​

  1. 先做 URL 映射和重定向计划
  2. 为历史链接建立 301 规则
  3. 用爬虫或脚本检查全站死链

18. 成本预估(经验值) ​

  1. 最小站点:1~2 天
  2. 100 篇内容 + 搜索 + CI:5~12 天
  3. 多语言 + 版本化平台:2~6 周(取决于内容量和团队规模)

19. 常见坑与规避 ​

  1. 过度使用 MDX,导致内容难迁移
    做法:业务逻辑和文档内容分离。

  2. i18n 与 versioning 同时启动,流程混乱
    做法:先稳定单语言版本化,再扩展多语言。

  3. 深度 Swizzle 后难升级
    做法:优先配置化,必要时才重写组件。


20. 上线检查清单 ​

  1. 无 broken links
  2. 版本切换可用
  3. 语言切换可用
  4. 搜索结果相关性达标
  5. 移动端菜单和目录可用
  6. 关键页面 Lighthouse 基线通过

21. 学习路线建议(10 天) ​

  1. Day1-2:跑通基础站点
  2. Day3:规范 sidebars 与内容结构
  3. Day4:接入搜索
  4. Day5-6:i18n 实作
  5. Day7-8:版本化策略落地
  6. Day9:CI/CD 自动化
  7. Day10:主题轻定制与复盘

22. 官方资料 ​

  1. 官网:https://docusaurus.io/
  2. 文档主入口:https://docusaurus.io/docs
  3. i18n:https://docusaurus.io/docs/i18n/introduction
  4. versioning:https://docusaurus.io/docs/versioning
  5. search:https://docusaurus.io/docs/search

23. 总结 ​

如果你要建设“长期演进、多人协作、具备平台能力”的文档体系,Docusaurus 依旧是第一梯队。它的代价是工程复杂度,但换来的是明确的扩展上限和治理能力。