用途
MD-Book 是一个基于 Rust 的文档生成器,定位为 mdbook 的现代替代方案,用于将 Markdown 文件转换为美观、可搜索的 HTML 文档。本技能在需要处理 MD-Book 时使用。
主要能力
- 将 Markdown 转换为 HTML 文档。
- 支持多种 Markdown 格式:Markdown、GFM、MDX。
- 服务端语法高亮(通过 syntect),支持主要语言。
- 内置开发服务器,默认端口 3000,支持实时重载(WebSocket)。
- 文件监听与自动重建。
- 集成 Pagefind 全文搜索(需安装 pagefind CLI)。
- 首页支持两种方式:自定义 index.md 内容,或自动生成基于 Shoelace UI 组件的卡片式导航。
- 每页包含右侧页内目录(TOC)。
- 使用 Tera 模板引擎进行模板定制。
- 内置 Web Components:doc-toc.js、search-modal.js、doc-sidebar.js、simple-block.js。
使用方式
基本命令
# 构建文档(Markdown 转 HTML)
md-book -i input_dir -o output_dir
# 开发模式,监听文件变化
md-book -i input_dir -o output_dir --watch
# 使用内置服务器(默认端口 3000)
md-book -i input_dir -o output_dir --serve
# 完整开发模式(监听 + 自定义端口服务)
md-book -i input_dir -o output_dir --watch --serve --port 8080
CLI 选项
| 选项 | 短写 | 说明 |
|---|---|---|
--input |
-i |
包含 Markdown 文件的输入目录(必填) |
--output |
-o |
HTML 文件的输出目录(必填) |
--config |
-c |
可选的配置文件路径 |
--watch |
-w |
监听变化并重建 |
--serve |
-s |
在 http://localhost:3000 提供服务 |
--port |
服务端口(默认:3000) |
从源码运行
# 克隆并构建
git clone https://github.com/terraphim/md-book.git
cd md-book
cargo build --release
# 从源码运行
cargo run -- -i docs -o output
cargo run -- -i docs -o output --serve --watch
配置
配置优先级(从高到低):
- CLI 参数
- 环境变量(MDBOOK_ 前缀)
- 自定义配置文件(--config 标志)
- 当前目录下的 book.toml
- 默认值
book.toml 配置示例(在输入目录中创建):
[book]
title = "My Documentation"
authors = ["Your Name"]
description = "Documentation description"
language = "en"
[output.html]
# 安全:默认禁用 markdown 中的原始 HTML
allow-html = false # 仅在你信任所有内容作者时才设为 true
mathjax-support = false
环境变量示例:
# 覆盖书名
MDBOOK_BOOK.TITLE="My Book" md-book -i input -o output
# 嵌套配置值使用下划线
MDBOOK_OUTPUT.HTML.MATHJAX_SUPPORT=true md-book -i input -o output
项目结构
输入目录:
input/
index.md # 可选:自定义首页内容
# 存在时:将你的 markdown 渲染为首页
# 不存在时:自动生成卡片式导航
getting-started.md
configuration.md
advanced/ # 子目录成为章节
topic1.md
topic2.md
images/ # 静态资源复制到输出
输出目录:
output/
index.html # 生成的首页
getting-started.html
configuration.html
advanced/
topic1.html
topic2.html
css/ # 样式
js/ # JavaScript(实时重载、搜索、语法高亮)
pagefind/ # 搜索索引(若启用搜索功能)
首页两种方式
方式一:使用 index.md 自定义内容。在输入目录创建 index.md,其内容将渲染为首页,支持完整 Markdown。
方式二:自动生成卡片导航。若无 index.md,MD-Book 自动生成基于 Shoelace UI 组件的卡片式首页,显示“Documentation”标题、各章节/目录卡片、章节内各页面卡片以及指向各页面的“Read More”按钮。
选择建议:需要自定义欢迎内容、特定导航顺序或品牌信息时使用 index.md;快速搭建或希望由文档结构驱动导航时使用自动生成卡片。
搜索
搜索通过 Pagefind 内置。需安装 pagefind CLI:
cargo install pagefind
Pagefind 在构建期间自动运行。如需手动索引:
pagefind --site output_dir
模板定制
模板使用 Tera 模板引擎:
| 模板 | 用途 |
|---|---|
| page.html.tera | 单个页面布局 |
| index.html.tera | 首页 |
| sidebar.html.tera | 导航侧边栏 |
| header.html.tera | 页面头部 |
| footer.html.tera | 页面底部 |
部署
Cloudflare Pages(推荐):
# 设置
./scripts/setup-cloudflare.sh
# 部署
./scripts/deploy.sh production
Netlify:
# 构建
cargo run -- -i docs -o dist
# 部署
netlify deploy --prod --dir=dist
GitHub Pages 使用 GitHub Actions 工作流:
- name: Build site
run: cargo run -- -i docs -o _site
- name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4
其他平台:Vercel、AWS Amplify、Render、Railway、Fly.io 和 DigitalOcean 均受支持,详见 DEPLOYMENT.md。
测试
# 单元测试
cargo test --lib --bins
# 集成测试
cargo test --test integration --features "tokio,search,syntax-highlighting"
# 所有测试
cargo test --all-targets --features "tokio,search,syntax-highlighting"
# 质量检查
make qa # 格式化、clippy、测试
make ci-local # 本地模拟 CI
特性标志
# Cargo.toml features
default = ["server", "watcher", "search", "syntax-highlighting"]
server = ["warp", "tokio/full"] # 带实时重载的开发服务器
watcher = ["notify", "tokio/full"] # 文件监听
search = ["pagefind"] # Pagefind 搜索集成
syntax-highlighting = ["syntect"] # 代码高亮
wasm = ["wasm-bindgen"] # WASM 支持
构建最小版本:
cargo build --no-default-features
适用场景
- 为项目生成 HTML 文档站点。
- 需要全文搜索、语法高亮和实时预览的文档工作流。
- 从 mdbook 迁移或寻找现代替代方案。
- 部署到 Cloudflare Pages、Netlify、GitHub Pages 等平台。
限制与安全注意事项
- 默认禁用 Markdown 中的原始 HTML 以保证安全。仅在信任所有内容时启用:
[output.html]
allow-html = true # 警告:启用 XSS 风险
- 密钥管理:使用 1Password 集成或环境变量;切勿提交 .env 文件;安全设置见 docs/1PASSWORD_SETUP.md。
- 搜索功能需要单独安装 pagefind CLI。
- 实时重载需同时使用 --watch 和 --serve 标志。
故障排查
构建失败:
# 验证 Rust 安装
rustc --version
cargo --version
# 清理并重建
cargo clean
cargo build --release
搜索不工作:
# 验证 pagefind 已安装
which pagefind
# 手动运行索引
pagefind --site output_dir
实时重载不工作:确保同时使用两个标志:
md-book -i docs -o output --watch --serve
仓库
- GitHub:https://github.com/terraphim/md-book
- Issues:https://github.com/terraphim/md-book/issues
- Discussions:https://github.com/terraphim/md-book/discussions