MkDocs
MkDocs 是一款基于 Python、专门用来做项目技术文档的静态站点生成器,全部内容使用 Markdown 书写,只靠一份 mkdocs.yml YAML配置文件管理网站,输出纯静态HTML,可部署在任意静态托管平台。大量开源项目使用它做官方文档,最出名的就是配套主题 Material for MkDocs。
MkDocs起源与技术栈
- 起源:开源项目,诞生于2014年,GitHub开源,主打简单、零前端配置快速产出文档站。
- 运行环境:Python3,使用pip安装;不需要Node.js。
- Markdown解析引擎:
Python‑Markdown,支持大量markdown扩展(表格、提示框、脚注等)。 - 配置:全部配置集中在项目根目录
mkdocs.yml。 - 两大核心命令:
mkdocs serve:本地开发服务器,保存md自动热重载预览mkdocs build:构建,输出静态文件到site/文件夹,直接上传部署。
MkDocs目录结构
新建项目后自动生成的目录结构
my_docs/
├── mkdocs.yml # 唯一配置文件
└── docs/ # 所有markdown文档放这里
├── index.md # 首页
└── ...其他md文件MkDocs核心特点
- 上手极其简单,不用写HTML、JS;只写Markdown,改yml配置。
- 内置开发服务器,修改文档浏览器自动刷新预览。
- 内置全文搜索,构建时生成索引,不需要第三方搜索服务,离线可用。
- 主题生态丰富
- 内置两个主题:
mkdocs(默认)、readthedocs(复古文档样式) - 第三方王者主题:Material for MkDocs,现代UI、暗色模式、代码注解、提示框、标签页、图标,绝大多数MkDocs项目都会安装这个主题。
- 内置两个主题:
- 插件系统:支持版本文档、PDF导出、重定向、数学公式、sitemap生成等。
- 输出纯静态HTML,GitHub Pages、Netlify、Vercel、普通服务器都可以部署,完美适配Git做版本管理,适合团队协作写文档。
- 支持子目录部署,配置
site_url即可,不会出现VitePress经常遇到的404资源路径问题。
MkDocs快速上手
1. 安装(前提电脑安装Python3)
bash
pip install mkdocs
# 安装最流行的Material主题(强烈推荐)
pip install mkdocs‑material2. 创建新项目
bash
mkdocs new my‑docs
cd my‑docs3. 本地实时预览
bash
mkdocs serve浏览器打开 http://127.0.0.1:8000,修改docs下面任意md,页面立刻刷新。
4. 示例最小mkdocs.yml配置(Material主题)
yaml
site_name: 我的Rust笔记
site_description: Rust学习文档
site_url: https://xxx.com/
theme:
name: material
language: zh #中文
# 导航菜单,手动定义顺序
nav:
- 首页: index.md
- Rust基础: rust/basic.md
- Box智能指针: rust/box.md
# markdown扩展
markdown_extensions:
- admonition
- pymdownx.details
- pymdownx.superfences5. 构建静态网站
bash
mkdocs build生成的全部网页输出在site文件夹,把这个文件夹全部上传服务器即可上线。
MkDocs优点
- 学习门槛低,不懂前端也能搭建专业文档站;基于Python,Python开发者无缝使用。
- Material主题功能完备,提示框、代码块、暗色模式开箱即用。
- 本地离线搜索,不需要接入Algolia。
- 子目录部署友好,资源路径坑比VitePress少很多。
- 插件丰富,支持导出PDF、多版本文档。
- 构建产物干净,纯静态,SEO友好。
MkDocs缺点
- 不支持MDX,不能直接在markdown写Vue/JS组件;想嵌入交互组件比较麻烦。对比VitePress可以直接写Vue组件。
- Material for MkDocs 2026进入维护模式:只修bug安全漏洞,不再新增大功能,新项目迭代到继任项目Zensical。
- 导航需要手动在
mkdocs.yml写nav;不会自动扫描md生成侧边栏(有插件可以自动生成)。 - Python环境,对于不熟悉Python的用户,会遇到pip、虚拟环境版本冲突。
- 博客能力弱,更偏向文档,不适合做复杂博客。
MkDocs vs VitePress
| MkDocs | VitePress |
|---|---|
| 技术栈 Python | 技术栈 Node.js / Vue3 |
| 只支持Markdown,不支持组件 | 支持Markdown + Vue组件(MD‑like) |
| Material主题,文档能力强 | Vue官方维护,生态强大 |
| 构建完全静态页面,页面跳转刷新 | 首屏静态HTML,后续SPA无刷新跳转 |
| 适合开源项目文档、笔记文档 | 适合文档、博客、官网 |
选型建议:
- 如果你只写纯文档笔记,不想折腾前端环境,熟悉Python → MkDocs(Material)
- 如果需要嵌入交互组件、Vue代码片段,熟悉前端 → VitePress
MkDocs常用插件
mkdocs‑material:主体主题mkdocs‑mike:文档多版本管理mkdocs‑with‑pdf:导出PDF文档mkdocs‑sitemap‑plugin:生成sitemap.xml,利于SEOmkdocs‑autonav:自动扫描md生成导航,不用手写nav
部署MkDocs
- GitHub Actions自动构建部署到GitHub Pages
- 把
site文件夹上传到Nginx、Caddy服务器 - Netlify/Vercel识别mkdocs项目一键部署
完整 mkdocs.yml
完整 mkdocs.yml(Material 中文模板) 直接复制使用,已经开启常用markdown扩展、sitemap、暗色模式、中文、SEO基础配置
yaml
site_name: Rust学习笔记
site_description: Rust编程语言学习文档与实战笔记
site_author: your name
site_url: https://www.example.com/
# 主题配置
theme:
name: material
language: zh
# 亮色/暗色切换
palette:
- media: "(prefers‑color‑scheme: light)"
scheme: default
primary: indigo
toggle:
icon: material/brightness‑7
name: 切换暗色模式
- media: "(prefers‑color‑scheme: dark)"
scheme: slate
primary: indigo
toggle:
icon: material/brightness‑4
name: 切换亮色模式
features:
- navigation.tabs
- navigation.sections
- navigation.top
- search.suggest
- search.highlight
- content.tabs.link
- content.code.annotate
# 导航,按自己文档修改路径
nav:
- 首页: index.md
- Rust基础:
- 变量与所有权: rust/ownership.md
- Box智能指针: rust/box.md
- 工具笔记:
- MkDocs使用笔记: tools/mkdocs.md
# Markdown扩展,提示框、折叠块、代码块、表格全部开启
markdown_extensions:
- admonition
- pymdownx.details
- pymdownx.superfences
- pymdownx.tabbed:
alternate_style: true
- pymdownx.highlight:
anchor_linenums: true
- toc:
permalink: true
# 插件
plugins:
- search
- sitemap:
sitemap_urls_include: ["*"]
# 额外头部标签,SEO补充meta
extra:
generator: false安装依赖
bash
pip install mkdocs mkdocs-material mkdocs-sitemap-plugin常用命令
bash
# 本地热更新预览
mkdocs serve
# 构建静态文件,输出到 site/ 文件夹
mkdocs build
# 清理旧构建文件
mkdocs build --clean目录摆放示例
my-docs/
├── mkdocs.yml
└── docs
├── index.md
├── rust
│ ├── ownership.md
│ └── box.md
└── tools
└── mkdocs.md小提示
- 如果不想手写
nav导航列表,可以安装插件mkdocs-autonav,自动扫描docs下所有md生成侧边栏,不用维护导航列表。
bash
pip install mkdocs-autonav然后在plugins增加:
yaml
plugins:
- autonav- 部署:把构建完成后的
site文件夹全部上传服务器,Nginx直接指向site目录即可。