01MVP
速查手册

Fumadocs

基于 Next.js 的高性能文档站框架,极速构建现代化的文档系统。

为什么用它

  • 一句话价值主张:如果你想在 Next.js 项目中用最少配置搭建高性能、美观且 SEO 友好的文档站,Fumadocs 能在 5 分钟内帮你搞定。
  • 三个立刻能感知的收益
    1. 开箱即用:内置全文搜索、深色模式、目录导航 (TOC)。
    2. MDX 强力驱动:直接在 Markdown 中使用 React 组件,Type-safe 内容管理。
    3. 极速性能:基于 Next.js App Router 优化,静态生成加载飞快。
  • 适合/不适合
    • 适合:需要构建产品文档、技术博客、知识库的开发者。
    • 不适合:完全非技术背景且需要可视化编辑器(CMS)的运营人员。

3 步极速上手

目标:让用户复制粘贴命令就能看到效果。

步骤 1:初始化项目

使用脚手架快速创建(推荐):

npm create fumadocs-app@latest
# 或者使用 pnpm
pnpm create fumadocs-app

按提示选择:

  • Project name: my-docs
  • Framework: Next.js
  • Tailwind CSS: Yes

步骤 2:启动开发服务器

进入目录并启动:

cd my-docs
npm run dev

打开浏览器访问 http://localhost:3000,你将看到默认的文档首页。

步骤 3:编写第一篇文档

修改 content/docs/index.mdx(或新建文件):

---
title: Hello World
description: 我的第一篇文档
---

## 欢迎使用 Fumadocs

这是一个 **Callout** 组件示例:

<Callout title="提示">
  Fumadocs 让文档编写变得非常简单!
</Callout>

保存后,浏览器会自动热更新显示内容。

高频命令

只保留日常开发中最常用的命令:

启动开发环境

npm run dev
# 启动本地服务器,支持热更新

构建生产版本

npm run build
# 生成用于部署的静态文件和产物

更新内容索引

npm run postinstall
# 如果添加了新文件但没显示,运行此命令重新生成内容索引(.map.ts)

类型检查

npm run types:check
# 检查 MDX 内容和 TypeScript 类型是否有误

实用但不高频的命令

自定义 CLI

npx fumadocs-mdx
# 手动触发 MDX 处理流程

添加 UI 组件

# 如果是手动集成而非脚手架创建
npm install fumadocs-ui fumadocs-core

最小可用配置

核心配置文件 source.config.ts (定义内容源):

// source.config.ts
import { defineDocs, defineConfig } from 'fumadocs-mdx/config';

export const { docs, meta } = defineDocs({
  dir: 'content/docs', // 文档存放目录
});

export default defineConfig({
  lastModifiedTime: 'git', // 自动获取最后修改时间
});

侧边栏结构控制 content/docs/meta.json

{
  "root": true,
  "pages": [
    "index",
    "---指南---",
    "getting-started",
    "deployment"
  ]
}

常见问题

Q: 新建的 MDX 文件在侧边栏不显示?

  • 症状:文件已创建,但左侧导航栏找不到。
  • 解决
    1. 确保文件在 content/docs 目录下。
    2. 运行 npm run postinstall 重新生成索引。
    3. 检查 meta.json 是否显式定义了 pages 且漏掉了该文件(如果 meta.json 存在)。
  • 成功判定:重启 dev 服务后侧边栏出现新页面。

Q: 图片无法显示?

  • 症状:MDX 中引用的本地图片 404。
  • 解决
    • 将图片放在 public/ 目录下,引用时使用绝对路径 /image.png
    • 或者使用 import 语法引入图片资源(需配置 Next.js 图片加载)。
  • 成功判定:图片正常渲染。

继续深入

核心特性

特性说明
MDX 支持Markdown + React 组件
自动生成导航基于文件结构生成侧边栏
全文搜索内置 Fuse.js 搜索
主题系统支持自定义主题
代码高亮语法高亮、行号、复制
数学公式LaTeX 支持

快速开始

npm create fumadocs@latest

项目结构

my-docs/
├── app/                    # Next.js 应用
│   ├── docs/[[...slug]]/   # 文档路由
│   ├── layout.tsx          # 根布局
│   └── page.tsx            # 首页
├── content/                # 文档内容 (MDX)
│   └── docs/
├── components/             # 自定义组件
├── lib/                    # 工具函数
├── fumadocs.config.ts      # 全局配置
└── package.json

配置文件

fumadocs.config.ts

import { defineConfig } from 'fumadocs/config';

export default defineConfig({
  title: 'My Docs',
  description: 'Documentation site',
  baseUrl: 'https://docs.example.com',
  search: {
    provider: 'fuse',
  },
  i18n: {
    defaultLocale: 'zh',
    locales: [
      { code: 'zh', name: '中文' },
      { code: 'en', name: 'English' },
    ],
  },
});

meta.json(页面元数据)

每个目录可放置 meta.json 控制导航和页面属性:

{
  "title": "Getting Started",
  "description": "Quick start guide",
  "icon": "Rocket",
  "root": true,
  "defaultOpen": true,
  "pages": ["index", "installation", "configuration"]
}
字段类型说明
titlestring目录/页面标题
descriptionstring描述(用于 SEO)
iconstringLucide 图标名称
rootboolean是否为根节点
defaultOpenboolean默认展开子项
pagesstring[]页面排序(文件名,不含扩展名)

页面级 frontmatter

MDX 文件顶部配置:

---
title: 页面标题
description: 页面描述
icon: IconName
full: false          # 是否全宽布局
toc: true            # 是否显示目录
---

# 正文内容

常用命令

npm run dev      # 开发模式
npm run build    # 构建
npm run preview  # 预览构建结果

MDX 组件使用

import { Callout } from 'fumadocs-ui/components/callout';
import { Tab, Tabs } from 'fumadocs-ui/components/tabs';

<Callout type="info" title="提示">
  重要信息
</Callout>

<Tabs items={["npm", "pnpm"]}>
  <Tab value="npm">npm install</Tab>
  <Tab value="pnpm">pnpm install</Tab>
</Tabs>

内置组件

组件用途
Callout提示框(info/warning/error)
Tabs/Tab标签页切换
Steps步骤指引
Files文件树展示
TypeTable类型表格
Accordions手风琴折叠
Card/ Cards卡片布局

自定义组件示例

// components/Alert.tsx
export function Alert({ children }: { children: React.ReactNode }) {
  return (
    <div className="bg-blue-100 border-l-4 border-blue-500 p-4">
      {children}
    </div>
  );
}

MDX 中使用:

import { Alert } from '@/components/Alert';

<Alert>自定义警告内容</Alert>

资源

On this page