Docusaurus文档站点开发技能 docusaurus

Docusaurus文档站点开发技能是专门用于快速构建、配置和管理基于React的现代化文档网站的工具。该技能提供完整的Docusaurus项目配置、侧边栏管理、版本控制、国际化支持、自定义插件开发、MDX组件集成、Algolia搜索配置等功能。适用于技术文档、API文档、产品手册等文档站点的快速开发和维护,支持多语言、多版本、可搜索的文档体系构建。关键词:Docusaurus文档站点、React文档开发、技术文档配置、版本控制文档、国际化文档、Algolia搜索、MDX组件、文档自动化。

前端开发 0 次安装 0 次浏览 更新于 2/26/2026

name: docusaurus description: 深度集成Docusaurus用于文档站点开发。配置项目、管理侧边栏、版本控制、国际化、开发插件,并为基于React的文档优化构建。 allowed-tools: Read, Write, Edit, Bash, Glob, Grep backlog-id: SK-002 metadata: author: babysitter-sdk version: “1.0.0”

Docusaurus 技能

深度集成Docusaurus用于文档站点开发。

能力

  • 生成Docusaurus项目配置
  • 创建和管理侧边栏结构(sidebars.js)
  • 配置版本控制和国际化(i18n)
  • 开发自定义Docusaurus插件
  • MDX组件创建与集成
  • 构建优化与调试
  • Algolia DocSearch配置
  • 主题定制

使用场景

在以下情况调用此技能:

  • 设置新的Docusaurus文档站点
  • 配置侧边栏和导航
  • 实现版本化文档
  • 添加国际化(i18n)支持
  • 创建自定义插件或主题

输入参数

参数 类型 必填 描述
action string 操作类型:init(初始化)、configure(配置)、sidebar(侧边栏)、version(版本)、i18n(国际化)、plugin(插件)
projectPath string Docusaurus项目路径
config object 配置选项
version string 版本标签
locale string 语言区域代码

输入示例

{
  "action": "configure",
  "projectPath": "./docs-site",
  "config": {
    "title": "我的文档",
    "tagline": "我的产品开发者文档",
    "url": "https://docs.example.com",
    "organizationName": "my-org",
    "projectName": "my-project"
  }
}

项目配置

docusaurus.config.js

// @ts-check
const { themes } = require('prism-react-renderer');

/** @type {import('@docusaurus/types').Config} */
const config = {
  title: '我的文档',
  tagline: '我的产品开发者文档',
  favicon: 'img/favicon.ico',

  url: 'https://docs.example.com',
  baseUrl: '/',

  organizationName: 'my-org',
  projectName: 'my-project',

  onBrokenLinks: 'throw',
  onBrokenMarkdownLinks: 'warn',

  i18n: {
    defaultLocale: 'en',
    locales: ['en', 'es', 'ja'],
  },

  presets: [
    [
      'classic',
      /** @type {import('@docusaurus/preset-classic').Options} */
      ({
        docs: {
          sidebarPath: './sidebars.js',
          editUrl: 'https://github.com/my-org/my-project/edit/main/',
          showLastUpdateTime: true,
          showLastUpdateAuthor: true,
          versions: {
            current: {
              label: 'Next',
              path: 'next',
            },
          },
        },
        blog: {
          showReadingTime: true,
          editUrl: 'https://github.com/my-org/my-project/edit/main/',
        },
        theme: {
          customCss: './src/css/custom.css',
        },
      }),
    ],
  ],

  themeConfig:
    /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
    ({
      image: 'img/social-card.jpg',
      navbar: {
        title: '我的项目',
        logo: {
          alt: '我的项目Logo',
          src: 'img/logo.svg',
        },
        items: [
          {
            type: 'docSidebar',
            sidebarId: 'tutorialSidebar',
            position: 'left',
            label: '文档',
          },
          {
            type: 'docsVersionDropdown',
            position: 'right',
          },
          {
            type: 'localeDropdown',
            position: 'right',
          },
          {
            href: 'https://github.com/my-org/my-project',
            label: 'GitHub',
            position: 'right',
          },
        ],
      },
      footer: {
        style: 'dark',
        links: [
          {
            title: '文档',
            items: [
              { label: '快速开始', to: '/docs/intro' },
              { label: 'API参考', to: '/docs/api' },
            ],
          },
          {
            title: '社区',
            items: [
              { label: 'Discord', href: 'https://discord.gg/example' },
              { label: 'Twitter', href: 'https://twitter.com/example' },
            ],
          },
        ],
        copyright: `版权所有 ${new Date().getFullYear()} 我的项目。`,
      },
      prism: {
        theme: themes.github,
        darkTheme: themes.dracula,
        additionalLanguages: ['bash', 'json', 'yaml'],
      },
      algolia: {
        appId: 'YOUR_APP_ID',
        apiKey: 'YOUR_SEARCH_API_KEY',
        indexName: 'my-project',
        contextualSearch: true,
      },
    }),
};

module.exports = config;

侧边栏配置

sidebars.js

/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
  tutorialSidebar: [
    'intro',
    {
      type: 'category',
      label: '快速开始',
      collapsed: false,
      items: [
        'getting-started/installation',
        'getting-started/quick-start',
        'getting-started/configuration',
      ],
    },
    {
      type: 'category',
      label: '指南',
      items: [
        'guides/authentication',
        'guides/api-usage',
        {
          type: 'category',
          label: '高级',
          items: [
            'guides/advanced/caching',
            'guides/advanced/performance',
          ],
        },
      ],
    },
    {
      type: 'category',
      label: 'API参考',
      link: {
        type: 'generated-index',
        title: 'API参考',
        description: '完整的API文档',
      },
      items: [
        'api/client',
        'api/authentication',
        'api/resources',
      ],
    },
    {
      type: 'link',
      label: 'GitHub',
      href: 'https://github.com/my-org/my-project',
    },
  ],
};

module.exports = sidebars;

自定义组件

标签页组件

// src/components/CodeTabs.jsx
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';

export function CodeTabs({ children, labels = ['JavaScript', 'Python', 'cURL'] }) {
  return (
    <Tabs groupId="code-examples">
      {labels.map((label, index) => (
        <TabItem key={label} value={label.toLowerCase()} label={label}>
          <CodeBlock language={label.toLowerCase()}>
            {children[index]}
          </CodeBlock>
        </TabItem>
      ))}
    </Tabs>
  );
}

API端点组件

// src/components/ApiEndpoint.jsx
import React from 'react';
import styles from './ApiEndpoint.module.css';

export function ApiEndpoint({ method, path, description }) {
  const methodColors = {
    GET: '#61affe',
    POST: '#49cc90',
    PUT: '#fca130',
    DELETE: '#f93e3e',
    PATCH: '#50e3c2',
  };

  return (
    <div className={styles.endpoint}>
      <span
        className={styles.method}
        style={{ backgroundColor: methodColors[method] }}
      >
        {method}
      </span>
      <code className={styles.path}>{path}</code>
      <p className={styles.description}>{description}</p>
    </div>
  );
}

版本控制

创建版本

# 创建版本快照
npm run docusaurus docs:version 1.0.0

# 版本化后的项目结构
docs/
├── intro.md              # 当前(next)版本
├── getting-started/
versioned_docs/
├── version-1.0.0/
│   ├── intro.md
│   └── getting-started/
versioned_sidebars/
├── version-1.0.0-sidebars.json
versions.json

versions.json

[
  "2.0.0",
  "1.1.0",
  "1.0.0"
]

国际化(i18n)

翻译结构

i18n/
├── en/
│   └── docusaurus-plugin-content-docs/
│       └── current/
│           └── intro.md
├── es/
│   └── docusaurus-plugin-content-docs/
│       └── current/
│           └── intro.md
└── ja/
    └── docusaurus-plugin-content-docs/
        └── current/
            └── intro.md

写入翻译命令

# 生成翻译文件
npm run write-translations -- --locale es

# 启动特定语言的开发服务器
npm run start -- --locale es

自定义插件

插件模板

// plugins/my-plugin/index.js
module.exports = function myPlugin(context, options) {
  return {
    name: 'my-plugin',

    async loadContent() {
      // 加载自定义内容
      return { /* content */ };
    },

    async contentLoaded({ content, actions }) {
      const { addRoute, createData } = actions;

      // 创建自定义路由
      addRoute({
        path: '/my-custom-page',
        component: '@site/src/pages/MyPage.jsx',
        exact: true,
      });
    },

    configureWebpack(config, isServer, utils) {
      // 修改webpack配置
      return {
        resolve: {
          alias: {
            '@custom': path.resolve(__dirname, 'src'),
          },
        },
      };
    },
  };
};

Algolia DocSearch

algolia.config.json

{
  "index_name": "my-project",
  "start_urls": [
    "https://docs.example.com/"
  ],
  "sitemap_urls": [
    "https://docs.example.com/sitemap.xml"
  ],
  "selectors": {
    "lvl0": ".menu__link--active",
    "lvl1": "article h1",
    "lvl2": "article h2",
    "lvl3": "article h3",
    "lvl4": "article h4",
    "content": "article p, article li"
  }
}

工作流程

  1. 初始化项目 - 创建新的Docusaurus站点
  2. 配置 - 设置docusaurus.config.js
  3. 结构化内容 - 组织文档和侧边栏
  4. 添加组件 - 创建自定义MDX组件
  5. 配置搜索 - 设置Algolia DocSearch
  6. 添加版本控制 - 创建版本快照
  7. 部署 - 构建并部署到托管平台

依赖项

{
  "dependencies": {
    "@docusaurus/core": "^3.0.0",
    "@docusaurus/preset-classic": "^3.0.0",
    "@mdx-js/react": "^3.0.0",
    "prism-react-renderer": "^2.0.0",
    "react": "^18.0.0",
    "react-dom": "^18.0.0"
  }
}

CLI命令

# 创建新项目
npx create-docusaurus@latest my-docs classic

# 启动开发服务器
npm run start

# 生产环境构建
npm run build

# 创建版本
npm run docusaurus docs:version 1.0.0

# 生成翻译
npm run write-translations -- --locale es

# 部署到GitHub Pages
npm run deploy

最佳实践

  • 使用MDX实现交互式组件
  • 为稳定版本实现版本控制
  • 配置搜索以提高可发现性
  • 添加编辑链接以支持社区贡献
  • 使用提示框进行标注
  • 使用ideal-image优化图片
  • 启用最后更新时间戳

参考

目标流程

  • docs-as-code-pipeline.js
  • docs-versioning.js
  • interactive-tutorials.js
  • knowledge-base-setup.js