常见问答 (FAQ)
快速解答常见问题。
一般问题
Docusaurus 是什么?
Docusaurus 是由 Facebook (Meta) 开发的静态网站生成器,专门用于构建文档网站。它基于 React,提供了开箱即用的文档功能。
为什么选择 Docusaurus?
- ⚡ 快速 - 基于 React 的单页应用,加载速度快
- 📝 易用 - 使用 Markdown 编写文档
- 🎨 美观 - 现代化的默认主题
- 🔍 搜索 - 内置搜索功能
- 🌍 国际化 - 完善的多语言支持
- 📱 响应式 - 完美支持移动设备
Docusaurus 适合什么项目?
- 技术文档网站
- API 参考文档
- 产品文档
- 开源项目文档
- 知识库
- 博客
安装和设置
需要什么前置条件?
- Node.js 18.0 或更高版本
- 包管理器:pnpm、npm 或 yarn
- 基本的命令行知识
- 基本的 Markdown 知识
如何选择包管理器?
推荐使用 pnpm:
- pnpm - 最快,节省磁盘空间(推荐)
- npm - Node.js 自带,兼容性好
- yarn - 速度快,功能丰富
可以使用 TypeScript 吗?
可以!Docusaurus 完全支持 TypeScript:
# 安装类型定义
pnpm add -D @docusaurus/module-type-aliases @docusaurus/types
文档编写
Markdown 和 MDX 有什么区别?
- Markdown - 纯文本标记语言,语法简单
- MDX - Markdown + JSX,可以在 Markdown 中使用 React 组件
如何添加图片?
# 方法 1:使用静态资源

# 方法 2:使用相对路径

# 方法 3:使用外部链接

如何创建内部链接?
# 相对路径(推荐)
[链接文本](./other-doc.md)
[链接到章节](./other-doc.md#section)
# 绝对路径
[链接文本](/docs/category/doc)
如何添加代码块?
```javascript
function hello() {
console.log('Hello, World!');
}
```
```python
def hello():
print("Hello, World!")
```
如何使用告示框?
:::note
这是一个普通提示。
:::
:::tip
这是一个有用的提示。
:::
:::warning
这是一个警告。
:::
:::danger
这是一个危险警告。
:::
配置
如何修改网站标题和 Logo?
编辑 docusaurus.config.js:
module.exports = {
title: '我的网站',
tagline: '网站标语',
favicon: 'img/favicon.ico',
themeConfig: {
navbar: {
title: '我的网站',
logo: {
alt: 'Logo',
src: 'img/logo.svg',
},
},
},
};
如何自定义主题颜色?
编辑 src/css/custom.css:
:root {
--ifm-color-primary: #2e8555;
--ifm-color-primary-dark: #29784c;
--ifm-color-primary-darker: #277148;
--ifm-color-primary-darkest: #205d3b;
--ifm-color-primary-light: #33925d;
--ifm-color-primary-lighter: #359962;
--ifm-color-primary-lightest: #3cad6e;
}
如何添加 Google Analytics?
// docusaurus.config.js
module.exports = {
themeConfig: {
gtag: {
trackingID: 'G-XXXXXXXXXX',
anonymizeIP: true,
},
},
};
国际化
如何添加多语言支持?
- 配置 i18n:
// docusaurus.config.js
module.exports = {
i18n: {
defaultLocale: 'zh-Hans',
locales: ['zh-Hans', 'en'],
},
};
- 创建翻译文件:
pnpm write-translations --locale en
- 翻译内容到
i18n/en/目录
如何切换默认语言?
修改 defaultLocale:
module.exports = {
i18n: {
defaultLocale: 'en', // 改为英文
locales: ['en', 'zh-Hans'],
},
};
部署
支持哪些部署平台?
- Vercel(推荐)
- Netlify
- GitHub Pages
- AWS S3 + CloudFront
- 阿里云 OSS
- 腾讯云 COS
- 任何支持静态网站的平台
如何部署到 Vercel?
- 推送代码到 GitHub
- 访问 Vercel
- 导入项目
- 自动部署完成
如何部署到 GitHub Pages?
# 配置 docusaurus.config.js
module.exports = {
url: 'https://username.github.io',
baseUrl: '/repository-name/',
organizationName: 'username',
projectName: 'repository-name',
};
# 部署
GIT_USER=username pnpm deploy
部署后如何更新?
推送代码到主分支,CI/CD 会自动部署更新。
性能
如何优化构建速度?
- 启用实验性快速模式:
module.exports = {
future: {
experimental_faster: true,
},
};
- 减少不必要的插件
- 优化图片大小
如何优化页面加载速度?
- 压缩图片
- 使用 WebP 格式
- 启用 CDN
- 使用代码分割(默认启用)
搜索
如何添加搜索功能?
使用本地搜索插件:
pnpm add @easyops-cn/docusaurus-search-local
// docusaurus.config.js
module.exports = {
themes: [
[
require.resolve('@easyops-cn/docusaurus-search-local'),
{
hashed: true,
language: ['zh', 'en'],
},
],
],
};
Algolia DocSearch 和本地搜索有什么区别?
-
Algolia DocSearch
- 云端搜索服务
- 需要申请(免费)
- 搜索速度快
- 需要网络连接
-
本地搜索
- 无需申请
- 离线可用
- 搜索索引包含在构建中
- 增加构建大小
自定义
如何添加自定义页面?
在 src/pages/ 目录创建文件:
// src/pages/custom.js
import Layout from '@theme/Layout';
export default function CustomPage() {
return (
<Layout title="自定义页面">
<div>
<h1>这是自定义页面</h1>
</div>
</Layout>
);
}
访问:http://localhost:3000/custom
如何添加自定义组件?
- 创建组件:
// src/components/CustomButton.js
export default function CustomButton({children}) {
return <button className="custom-button">{children}</button>;
}
- 在 MDX 中使用:
import CustomButton from '@site/src/components/CustomButton';
<CustomButton>点击我</CustomButton>
如何修改主题组件?
使用 swizzle 命令:
# 查看可修改的组件
pnpm swizzle @docusaurus/theme-classic --list
# 修改组件
pnpm swizzle @docusaurus/theme-classic Footer --eject
版本管理
如何创建文档版本?
pnpm docusaurus docs:version 1.0.0
这会创建 versioned_docs/version-1.0.0/ 目录。
如何管理多个版本?
编辑 versions.json:
[
"2.0.0",
"1.0.0"
]
配置版本下拉菜单:
module.exports = {
themeConfig: {
navbar: {
items: [
{
type: 'docsVersionDropdown',
position: 'right',
},
],
},
},
};
故障排查
构建失败怎么办?
- 检查错误信息
- 清除缓存:
pnpm clear - 删除 node_modules 重新安装
- 查看 常见问题
热重载不工作怎么办?
- 重启开发服务器
- 清除缓存
- 检查文件监听限制(Linux)