文档系统
本项目使用 Nextra、MDX 内容与文档主题提供 /docs 阅读体验。
功能
📚 基于 MDX 的内容
使用 MDX(Markdown + JSX)编写文档,支持:
- 丰富 Markdown 语法,包括 GitHub Flavored Markdown(GFM)
- 直接嵌入文档的 React 组件
- Shiki 代码语法高亮
- 标题、描述等 frontmatter metadata
🎨 界面
基于 Nextra 主题构建:
- 可折叠分区的响应式侧边导航
- 方便页内跳转的目录
- 页面之间的上一篇/下一篇导航
- 全文搜索
- 简洁、专业的设计
🚀 开发体验
支持高效开发:
- 热重载:开发时即时查看修改
- 类型安全:完整 TypeScript 支持
- 快速构建:通过 OpenNext 面向 Cloudflare Workers 优化
- Git 管理:文档与代码一同纳入版本控制
目录结构
中文文档内容组织在 src/app/zh-CN/docs/ 目录中:
src/app/zh-CN/docs/
├── layout.tsx # 绑定共享 Nextra 文档布局
├── (overview)/
│ └── page.mdx # 文档首页
├── _meta.js # 根导航配置
├── getting-started/
│ ├── _meta.js # 分区导航
│ ├── installation/
│ │ └── page.mdx
│ ├── configuration/
│ │ └── page.mdx
│ └── deployment/
│ └── page.mdx
└── guides/
├── _meta.js
├── authentication/
│ └── page.mdx
├── blog-system/
│ └── page.mdx
└── documentation/
└── page.mdx该目录只放面向用户的内容。内部贡献者指引放在路由内 AGENTS.md 文件中;维护者文档的位置遵循 docs/AGENTS.md。
创建文档
添加页面
- 在合适目录中创建新文件夹与
page.mdx文件:
mkdir -p src/app/zh-CN/docs/guides/my-guide
touch src/app/zh-CN/docs/guides/my-guide/page.mdx- 添加 frontmatter 与内容:
---
locale: zh-CN
translationKey: guides.my-guide
title: 我的指南
description: 一篇实用指南
---
# 我的指南
在此使用 **Markdown** 编写内容!
## 章节
使用标题组织内容。- 更新父目录的
_meta.js:
export default {
authentication: "认证",
"blog-system": "博客系统",
"my-guide": "我的指南",
};添加分区
- 创建新目录:
mkdir -p src/app/zh-CN/docs/my-section/page-1
mkdir -p src/app/zh-CN/docs/my-section/page-2- 创建导航配置
_meta.js:
export default {
"page-1": "页面一",
"page-2": "页面二",
};- 为分区添加页面:
touch src/app/zh-CN/docs/my-section/page-1/page.mdx
touch src/app/zh-CN/docs/my-section/page-2/page.mdxFrontmatter 选项
每个 MDX 文件顶部都应包含 frontmatter:
---
locale: zh-CN
translationKey: guides.my-guide
title: 页面标题
description: 用于 SEO 和预览的简短描述
---可用字段
- title(必填):导航与页首显示的页面标题
- description:SEO 使用的页面描述;已发布语言资源必须填写
- locale(必填):资源语言
en或zh-CN - translationKey(必填):完整对应版本共用的主题身份
Markdown 功能
代码块
支持语法高亮:
```tsx
import { Button } from "@t3template/ui/button";
export function Example() {
return <Button>点击我</Button>;
}
```链接
链接到其他文档页面:
另请参阅:[认证指南](/zh-CN/docs/guides/authentication)表格
创建数据表格:
| 功能 | 描述 |
| --- | --- |
| MDX | 包含 JSX 的 Markdown |
| 搜索 | 全文搜索 |
| 主题 | 可定制设计 |列表
有序与无序列表:
- 项目一
- 项目二
- 嵌套项目
- 另一个嵌套项目
1. 第一步
2. 第二步
3. 第三步图片
在文档中添加图片:
引用
突出重要信息:
> **说明:**这是一条需要读者关注的重要说明。配置
定制主题
编辑项目根目录的 theme.config.tsx:
import { Footer, Navbar } from "nextra-theme-docs";
const docsThemeConfig = {
navbar: (
<Navbar
logo={<span>你的文档标志</span>}
logoLink="/zh-CN/docs"
projectLink="https://github.com/aigotowork/cfstack"
/>
),
footer: <Footer>你的页脚文字</Footer>,
docsRepositoryBase: "https://github.com/aigotowork/cfstack/tree/main/src/app",
};导航结构
侧边导航自动从以下内容生成:
src/app/zh-CN/docs/中的文件结构- 各目录的
_meta.js文件
_meta.js 示例:
export default {
index: "介绍",
"getting-started": "开始使用",
guides: "指南",
"api-reference": "API 参考",
};样式
自定义样式
在 src/styles/docs-custom.css 中添加自定义样式:
/* 自定义文档样式 */
.nextra-content {
/* 你的自定义样式 */
}主题颜色
文档继承 src/styles/globals.css 中的全局主题颜色。
编写建议
1. 按功能组织
将相关文档放在同一文件夹中。
2. 使用明确标题
标题应描述具体内容,便于浏览:
- ✅ “安装依赖”
- ❌ “安装”
3. 提供示例
为每个概念提供代码示例。
4. 连接相关页面
使用站内链接连接相关文档:
另请参阅:[配置指南](/zh-CN/docs/getting-started/configuration)5. 保持更新
在以下情况下审阅并更新文档:
- 新增功能时
- API 改变时
- 用户报告理解困难时
故障排查
MDX 编译错误
出现 MDX 错误时:
- 检查是否有未闭合 JSX 标签
- 确认 frontmatter 的 YAML 格式正确
- 确认代码块使用正确的三反引号边界
导航未更新
侧边导航未反映修改时:
- 重启开发服务器
- 检查
_meta.js是否有语法错误 - 清理 Next.js 缓存:
rm -rf .next
样式问题
样式未生效时:
- 检查共享
src/app/docs/reading-layout.tsx中的 CSS 导入 - 检查 Tailwind 配置
- 配置变化后重启开发服务器
下一步
- 编写第一篇文档
- 定制主题配置
- 为文档添加自定义组件
参考资源
语言资源与搜索
英文资源位于 src/app/en/docs,中文资源位于 src/app/zh-CN/docs。原 /docs 入口将已知页面重定向到英文。两棵目录树共用 src/app/docs/reading-layout.tsx、Nextra MDX 组件注册与站点页首。每个已发布页面在 frontmatter 声明 locale、translationKey、title 与 description。完整对应版本使用同一翻译键,并提供本语言 _meta.js 标签和链接。
未发布 Docs 应放在公开 App Router 树之外:构建会拒绝公开 page.mdx 中的 draft: true,不会悄悄发布它。缺译时显示明确的 noindex 阅读链接页面,不进入 sitemap 或搜索索引。
根布局按请求解析语言,因此生产 Docs 页面动态渲染。npm run build 通过 postbuild 运行 scripts/docs-search.ts,使用已安装 MDX parser 直接从作者资源生成 Pagefind 记录。索引省略代码、导入、可执行表达式与组件属性,不执行 MDX。Pagefind 负责语言分词,Nextra 负责搜索 UI。搜索只读取当前语言的索引与筛选条件,使用规范语言 URL。无需 Worker 文件系统扫描或实时内容索引。