跳转到内容
关系图谱

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 依旧是第一梯队。它的代价是工程复杂度,但换来的是明确的扩展上限和治理能力。