PlantUML 与文档站集成:Hexo / MkDocs / Sphinx / Docusaurus 全攻略
文档站里放图,最好的方案因框架而异——这里有 4 套主流工具的实际配置。
为什么需要专门讨论这件事?
PlantUML 源码 + 渲染结果是分开的。这意味着文档站有三种嵌入方式:
- 预渲染:构建时生成 SVG 静态文件 →
<img>引入(最快、最稳) - 客户端渲染:运行时调 plantuml.com / 自有 server(灵活、慢一点)
- 边渲染边预生成:混用——平时用预渲染,作者改图时客户端实时预览
下面按 4 套常见工具说。
Hexo(你正在用的)
方案 A:服务端预渲染(推荐)
用 hexo-renderer-plantuml:
1 | npm install hexo-renderer-plantuml --save |
_config.yml:
1 | plantuml: |
post 里:
1 | {% plantuml %} |
构建时由 plantuml CLI 渲染成 SVG,嵌入 HTML。优点:纯静态、加载快、SEO 友好。缺点:构建慢(每张图都要 Java/PlantUML)。
方案 B:客户端实时渲染
1 | <script src="https://cdn.jsdelivr.net/npm/plantuml-encoder@1.4.0/lib/puml.min.js"></script> |
优点:构建快、改图不用 rebuild。缺点:依赖 plantuml.com,CI 构建机无法翻墙时炸。
方案 C:TeaVM 客户端预渲染(折中)
把 plantuml.js 放进 themes/<name>/source/js/,在页面里走 TeaVM:
- 第一次加载慢(TeaVM 启动),之后缓存
- 全离线、不依赖外部服务
- 配置麻烦些,参考本站实践
MkDocs(Python 文档站)
1 | pip install plantuml-markdown |
mkdocs.yml:
1 | plugins: |
post 里:
1 | Alice -> Bob: Hi |
优点:支持本地 plantuml jar(也可走 plantuml.com)。缺点:默认走外部服务。
Sphinx(Python 官方文档系统)
1 | pip install sphinxcontrib-plantuml |
conf.py:
1 | extensions = ['sphinxcontrib.plantuml'] |
post 里:
1 | .. uml:: |
或者用 .. plantuml:: directive 引用外部 .puml 文件——这样版本控制好(也方便 PR review 图源)。
Docusaurus(React 文档站)
Docusaurus 3.x 用 MDX,PlantUML 没官方插件。常见做法:
方案 A:MDX 内嵌
1 | import PlantUML from "@site/src/components/PlantUML"; |
PlantUML 组件调 plantuml-encoder 拼 plantuml.com URL 实时显示。
方案 B:预生成静态
你写一个 build 脚本:扫 docs/**/*.puml → 调 plantuml CLI → 输出 static/img/uml/*.svg → MDX 里 <img src="/img/uml/xxx.svg">。
选哪个?
| 框架 | 推荐方案 | 原因 |
|---|---|---|
| Hexo | 预渲染 | 构建不慢、产出静态最快 |
| MkDocs | plantuml.com | 插件活跃,文档示例多 |
| Sphinx | sphinxcontrib | rst 原生 directive,reST 习惯舒服 |
| Docusaurus | MDX + encoder | 默认走客户端,构建零负担 |
共同的踩坑
1. plantuml.com 跨境
中国大陆 CI 翻墙是个问题:
- travis-ci / GitHub Actions 海外 runner OK
- 自建 runner(国内)经常 fetch 失败
- 解法:站内自部署 plantuml server,docker image 一行
docker run -d -p 8888:8080 plantuml/plantuml-server
2. CJK 字体
所有方案都会有这个问题。puml 顶部加:
1 | skinparam defaultFontName "Noto Sans CJK SC" |
或者 skinparam defaultFontName "Source Han Sans SC"。
3. 图缓存
CI 上每次 build 都重新渲染——会爆慢。hexo 用 cache: false + cache: true 分场景(开发时不缓存、生产缓存)。MkDocs 也有 cache 选项。
4. 版本对齐
plantuml CLI 版本差异大(!include 行为、!theme 引入方式)。建议:
Dockerfile里固定plantuml/plantuml:1.2024.x- 在 README 写明依赖的 PlantUML 版本
小结
- Hexo → 预渲染
- MkDocs → 插件默认 plantuml.com,国内可用 docker 自建
- Sphinx → sphinxcontrib(reST directive 最干净)
- Docusaurus → MDX + plantuml-encoder(客户端)
下一步
- 标题: PlantUML 与文档站集成:Hexo / MkDocs / Sphinx / Docusaurus 全攻略
- 作者: puml.online
- 创建于 : 2026-07-28 16:40:00
- 更新于 : 2026-08-14 21:34:29
- 链接: https://puml.online/blog/plantuml-documentation-site/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。