936 字
5 分钟
MkDocs Material 实践
2025-03-25

为什么选择 MkDocs#

写技术文档时,我们通常会在 VitePress、Docusaurus、MkDocs、Sphinx 之间挑选。MkDocs Material 兼顾了“写 Markdown 的丝滑体验”和“默认主题即是业界标杆”两件事:不用懂 React、Vue,也能写出交互友好的文档。更重要的是,它的配置文件精简易读,适合小团队快速搭建知识库和项目手册。

环境准备#

  1. 安装 Python 3.9+,建议顺手安装 pipx 方便管理命令行工具。
  2. 创建独立虚拟环境,避免和项目依赖混在一起:
python -m venv .venv
source .venv/bin/activate          # Windows 使用 .venv\Scripts\activate
pip install --upgrade pip
pip install mkdocs-material
  1. 初始化骨架:
mkdocs new docs-site
cd docs-site
mkdocs serve                      # 默认 http://127.0.0.1:8000

MkDocs 会在 docs/ 目录下生成 Markdown 文件,并通过 mkdocs.yml 管理导航、主题和插件。

配置文件要点#

以下是一个常用的 mkdocs.yml 示例:

site_name: Awesome Docs
theme:
  name: material
  language: zh
  palette:
    - scheme: default
      primary: blue
      accent: light blue
  features:
    - navigation.tabs
    - navigation.sections
    - content.code.annotate
markdown_extensions:
  - admonition
  - pymdownx.superfences
  - pymdownx.tabbed:
      alternate_style: true
plugins:
  - search
  - blog
  - tags
nav:
  - 🏠 概览: index.md
  - 快速开始:
      - 安装: getting-started/install.md
      - 配置: getting-started/config.md
  - 进阶:
      - 主题定制: advanced/theme.md
      - 部署: advanced/deploy.md
  • features 中的选项可以开启目录分组、代码注释、粘性导航等 Material 主题特性。
  • markdown_extensions 建议启用 pymdownx 系列,支持代码标签、折叠块、键盘符号等增强语法。
  • plugins 里常见的还有 minify, git-revision-date-localized, awesome-pages 等,可根据项目体量再行添加。

Markdown 写作增强#

Material 对 Markdown 语法进行了大量扩展,可以降低文档维护成本:

  • 提示块:使用标准的 admonition 语法即可生成漂亮的提醒框。

    !!! note "接口说明"
        这里会展示接口返回的数据结构示例。
    
  • 标签页:通过 pymdownx.tabbed 将多语言代码段组合在一起。

    === "Python"
        ```py
        print("hello")
        ```
    === "Go"
        ```go
        fmt.Println("hello")
        ```
    
  • 数据表格:搭配 pymdownx.tabular 或直接使用 Markdown 表格,Material 会自动添加滚动和排序能力。

  • 插入 Mermaid:启用 pymdownx.superfences 后,可直接书写流程图与时序图,文档即刻渲染。

自定义主题与品牌化#

当需要加入品牌色、字体或组件时,最简方案是改写 docs/stylesheets/extra.css 并在配置中引入:

extra_css:
  - stylesheets/extra.css
extra_javascript:
  - javascripts/analytics.js

配合 mkdocs-materialtheme.custom_dir 参数可以覆写部分模板,实现首页英雄横幅、页脚版权信息等定制化。记得把公共变量抽进 partials,避免每次升级主题时难以合并。

部署与持续集成#

  • GitHub Pages:执行 mkdocs gh-deploy --force 即可发布到 <username>.github.io。在 CI/CD 中可以使用官方提供的 GitHub Actions workflow

  • 内网发布:将 mkdocs build 生成的 site/ 目录交给 Nginx/OSS/CDN 即可。推荐在流水线中添加 pip install mkdocs-material[imaging] 提前生成图标、暗色主题资源。

  • 预览环境:使用 mkdocs serve -a 0.0.0.0:8000,让团队成员在局域网访问实时预览;配合 Docker 可以做到一行命令启动:

    docker run --rm -it -p 8000:8000 -v ${PWD}:/docs squidfunk/mkdocs-material
    

协同编辑流程#

  • docs/ 配合 Conventional Commit 与 PR 检查流程管理,避免文档与代码脱节。
  • 利用 mkdocs serve --dirtyreload 获得实时刷新体验,写作效率显著提升。
  • 为大型团队增加 markdownlinttypos 等校验工具,保证行文风格一致性。
  • 若文档与版本关联,使用 mike 插件维护多版本站点,保留历史版本入口。

常用资源#

  • 官方文档:每个 feature 都有 demo 代码,直接复用。
  • mkdocs-boilerplate 示例仓库:学习如何组织目录和导航。
  • Diátaxis 文档写作方法论:帮助我们区分教程、解释、操作指南与参考资料,合理拆分文档结构。
  • DocSearch:为公开站点申请免费全文检索服务,搜索体验对大型文档尤为重要。
MkDocs Material 实践
https://bangwu.top/posts/mkdocs/
作者
棒无
发布于
2025-03-25
许可协议
CC BY-NC-SA 4.0