Docusaurus
由 Meta 维护,使用 React、MDX 和插件系统构建文档及内容网站的静态站点生成器。
项目概述
Docusaurus 为技术文档提供开箱即用的侧边栏、版本化、国际化、博客、搜索和主题能力,同时允许通过 React、MDX、插件与主题组件扩展成完整内容网站。
Docusaurus 是由 Meta 开源并采用 MIT 许可证的静态站点生成器,重点解决技术文档和内容发布问题。它在构建阶段为每条路径生成 HTML,并在浏览器中提供 React 驱动的客户端导航与交互。官方 classic Preset 集成文档、博客、页面、主题和常用样式,内容作者可以主要编写 Markdown 或 MDX,工程团队则能通过配置、插件、主题和 Swizzle 深度定制网站。
主要特点
Docusaurus 把文档站常见能力整合为可配置的 React 内容平台,并保留从轻量配置到深度定制的渐进路径。
文档优先的静态生成
为每条路径生成可索引的 HTML,同时提供快速客户端导航,兼顾首次访问、SEO 和应用式浏览体验。
Markdown 与 MDX
普通内容可以保持 Markdown 简洁,需要交互时可在 MDX 中导入并使用 React 组件。
文档版本化
可保存特定发布版本的文档与侧边栏,并通过版本下拉菜单让用户在 current 与历史版本间切换。
内置国际化架构
Locale、翻译文件、内容目录和构建命令形成完整 i18n 工作流,可分别生成和部署多语言站点。
文档、博客与自定义页面
classic Preset 同时提供文档、博客和 React 页面,可在同一个项目中组织指南、公告与营销页面。
插件与主题系统
插件负责内容、路由和构建生命周期,主题提供界面组件;Preset 可把常用组合封装成统一配置。
主题定制与 Swizzle
可先通过 Infima 变量和自定义 CSS 调整品牌,再按需包装、弹出或替换具体主题组件。
搜索与内容导航
侧边栏、目录、分页、面包屑和多种搜索集成覆盖大型文档最常见的信息查找路径。
适用场景
适合需要结构化文档、长期版本维护和统一品牌体验,同时希望继续使用 React 生态的团队。
开源项目文档
适合安装指南、API 使用教程、贡献说明、版本公告和社区博客集中发布。
多版本产品手册
可以让旧版本用户继续访问匹配其软件版本的文档,并将下一版本内容保留在 current。
多语言开发者门户
内置 Locale 与翻译目录适合维护导航、界面字符串、文档和博客的多语言版本。
React 组件化文档
MDX 可嵌入交互演示、选项卡、图表与设计系统组件,适合开发者体验要求较高的文档。
团队工程知识库
Git、Markdown、代码审查和静态构建适合架构规范、运行手册与内部平台说明。
内容与营销混合站点
React 页面、博客和文档插件可共同承载产品首页、更新日志、教程与参考资料。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Docusaurus 擅长的地方
- 文档侧边栏、博客、版本化和国际化等能力开箱即用
- Markdown 适合普通作者,MDX 与 React 又能覆盖复杂交互
- 静态 HTML 易于部署,并提供快速的客户端页面切换
- 配置、插件、Preset、主题和 Swizzle 形成渐进式扩展路径
- TypeScript 支持、热更新和内容同仓工作流适合工程团队
- 社区成熟,官方文档完整,长期用于大量开源项目网站
需要注意
采用前应考虑的问题
Docusaurus 网站是 React 应用;如果站点只需极简静态 HTML 且几乎没有交互,MkDocs、Hugo 或 Eleventy 可能更轻。
每次创建版本都会保存文档与侧边栏快照,长期维护许多历史版本会增加仓库体积、搜索索引和修复成本。
MDX 可导入和执行组件代码,不应把不受信任的用户内容直接作为 MDX 构建;内容权限应按源代码管理。
弹出的主题组件成为项目自维护代码,升级 Docusaurus 时需要处理上游结构与 API 变化。
多版本、多语言和大量页面会成倍扩大构建任务,应按 Locale 或版本拆分工作并监控内存、耗时和搜索索引。
完整生产搜索常依赖 Algolia 或社区插件,需要单独处理索引、权限、抓取配置与离线环境。
快速开始
使用官方 TypeScript 模板创建站点,配置导航与主题,编写 MDX 文档,再生成版本和生产静态文件。
bashnpx create-docusaurus@latest open-docs classic --typescript
cd open-docs
npm run starttypescript// docusaurus.config.ts
import type {Config} from "@docusaurus/types";
import type * as Preset from "@docusaurus/preset-classic";
const config: Config = {
title: "Open Docs",
tagline: "清晰、可维护的项目文档",
url: "https://docs.example.com",
baseUrl: "/",
favicon: "img/favicon.ico",
organizationName: "open-docs",
projectName: "website",
presets: [
[
"classic",
{
docs: {
sidebarPath: "./sidebars.ts",
editUrl: "https://github.com/open-docs/website/edit/main/",
},
blog: true,
theme: {
customCss: "./src/css/custom.css",
},
} satisfies Preset.Options,
],
],
themeConfig: {
navbar: {
title: "Open Docs",
items: [
{type: "docSidebar", sidebarId: "guide", label: "指南"},
{to: "/blog", label: "博客"},
],
},
} satisfies Preset.ThemeConfig,
};
export default config;typescript// sidebars.ts
import type {SidebarsConfig} from "@docusaurus/plugin-content-docs";
const sidebars: SidebarsConfig = {
guide: [
"intro",
{
type: "category",
label: "使用指南",
items: [{type: "autogenerated", dirName: "guide"}],
},
"deployment",
],
};
export default sidebars;markdown---
id: intro
title: 项目简介
sidebar_position: 1
description: 从这里开始了解 Open Docs
---
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
# 欢迎使用 Open Docs
这里是项目的安装、配置和使用文档。
<Tabs>
<TabItem value="npm" label="npm" default>
`npm install open-docs`
</TabItem>
<TabItem value="pnpm" label="pnpm">
`pnpm add open-docs`
</TabItem>
</Tabs>tsx// src/components/FeatureCard.tsx
import type {ReactNode} from "react";
import styles from "./FeatureCard.module.css";
type Props = {
title: string;
children: ReactNode;
};
export function FeatureCard({title, children}: Props) {
return (
<section className={styles.card}>
<h2>{title}</h2>
<div>{children}</div>
</section>
);
}
// 在 MDX 中:
// import {FeatureCard} from "@site/src/components/FeatureCard";
// <FeatureCard title="静态生成">每条路径都会生成 HTML。</FeatureCard>bash# 保存 1.0 文档快照
npm run docusaurus docs:version 1.0
# 生成简体中文翻译文件
npm run write-translations -- --locale zh-CN
npm run write-heading-ids -- --locale zh-CN
# 本地预览中文站点
npm run start -- --locale zh-CNbashnpm run typecheck
npm run build
npm run serve
# 静态构建结果位于 build 目录下一步:先使用 classic Preset、自动侧边栏和少量 CSS 完成真实内容迁移;只有默认主题无法满足需求时再 Swizzle,并在 CI 中同时执行 typecheck 与 build。
类似项目
这些工具同样面向文档或内容网站,但在技术栈、内置能力和定制方式上各有侧重。
VitePress
基于 Vite 与 Vue、面向技术文档和内容网站的快速静态站点生成器。
查看项目MkDocs
使用 Python、Markdown 和 YAML 配置构建项目文档的静态站点生成器。
查看项目Markdoc
由 Stripe 开源、基于 Markdown 的声明式内容创作框架与渲染工具链。
查看项目Gatsby
基于 React 和 GraphQL 数据层、面向内容网站的静态与混合渲染框架。
查看项目Next.js
基于 React 的全栈 Web 框架,覆盖渲染、路由和部署。
查看项目Astro
面向内容网站的 Web 框架,默认发送更少的客户端 JavaScript。
查看项目Rspress
基于 Rspack、React 和 MDX,强调快速构建与文档体验的静态站点生成器。
访问官网Docusaurus vs MkDocs
Docusaurus 与 MkDocs 都专注文档网站并输出静态页面。Docusaurus 使用 React 和 MDX,内置版本化、国际化与组件化交互;MkDocs 使用 Python、Markdown 和 Jinja,强调简单透明的内容管线。
| 比较维度 | Docusaurus | MkDocs |
|---|---|---|
| 技术栈 | Node.js、React、MDX 与 TypeScript | Python、Markdown、YAML 与 Jinja |
| 内容语法 | Markdown 或可嵌入 React 的 MDX | Python-Markdown 与可配置 Extension |
| 客户端体验 | 静态 HTML 加 React SPA 导航与交互 | 传统静态页面,可按需加入 JavaScript |
| 版本化 | 文档快照、版本路由和切换界面内置 | 通常依赖第三方插件或独立构建流程 |
| 国际化 | Locale、翻译文件与构建命令内置 | 主题界面本地化内置,内容翻译依赖扩展 |
| 主题定制 | Infima、React 主题组件与 Swizzle | Jinja Override、CSS/JS 与第三方主题 |
| 扩展方式 | Plugin、Preset、Theme 与 React Component | Python 插件事件和 Markdown Extension |
| 更适合 | 多版本、多语言、交互式 React 文档门户 | 轻量文档、Python 团队和纯 Markdown 内容 |
如果需要多版本、多语言、React 组件和完整开发者门户体验,Docusaurus 通常提供更集成的起点;如果团队希望使用 Python,以少量配置维护纯 Markdown 文档,并尽量减少浏览器运行时与前端概念,MkDocs 更轻巧。选型时应以真实页面数量、版本与 Locale 组合测试构建时间、搜索和升级流程。
资料核验
版本、维护信息与本页采用的官方资料来源。
本次核验覆盖 Docusaurus 的官方定位、安装要求、classic Preset、React/MDX、文档版本化、国际化、主题定制和静态构建方式。项目正在持续演进,采用前应继续检查最新发布说明、Node.js 要求与插件兼容性。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 6 月 4 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。