Sphinx 探索历史
寻找笔记软件
Markdown 最先出现在我的视野里,但功能过于孱弱,也没统一规范,野蛮生长。随后尝试了 Asciidoctor 和 Sphinx,功能上大致符合,用了一段时间的 Asciidoctor ,发现配套缺失,在看到内核也使用 Sphinx 后,开始了摸索之旅。
解决构建环境
在 Windows 的泥潭里挣扎,环境配置实在是痛点,辛亏 VsCode 横空出世,配合 Remote SSH,快速解决了环境问题,具体配置如下:
虚拟机安装 Linux,然后配置环境
VsCode 配合安装 Remote SSH,进行文档编辑
Python 提供简易 HTTP 服务,在浏览器呈现文档
每次编辑后,手动进行编译,然后刷新网页
自动化流程探索
能偷懒是最好的,开始简化流程
使用 inotify 等机制监控文件实现自动编译
使用 livereload 等浏览器插件实现自动刷新
环境迁移和固化
虚拟机对于环境管理还是不便,此时 docker 技术开始火热,在查阅资料后,发现已经有人用 docker 固化 sphinx 环境,我开始了环境迁移
更多插件的诞生
VsCode 快速发展,出现了很多插件:
Live Server 代替了原先的 livereload,浏览器不在需要插件
reStructuredText 及其配套提供了语法高亮和检查服务
Sphinx 也有很多插件:
sphinx-autobuild : 自动编译工具,代替了 inotify 和 Live Server(集成度更高)
sphinx-copybutton : 代码复制
sphinxnotes-strike : 删除线
sphinx-cjkspace : 中文支持
sphinxcontrib-mermaid : 图片支持
sphinxcontrib-kroki : 图片支持
等等等
历史的倒车:
reStructuredText 提供了很多功能,包括自动编译功能,为此我一度放弃了 sphinx-autobuild,这期间遇上很多问题,比如不完全编译,更新单个文件但没有更新目录,即不会处理依赖,无意间再次启用 sphinx-autobuild,上述问题随之消失。还是官方插件好。
DevContainer 最终方案
到此方案已经很成熟了,但还是存在痛点,不能全部通过配置文件实现自动化
docker 存在权限问题,需要用脚本挂载
#!/bin/bash IMAGE="${1:-ubuntu}" docker run -it \ --rm \ -v "/etc/group:/etc/group:ro" \ -v "/etc/passwd:/etc/passwd:ro" \ -v "/etc/shadow:/etc/shadow:ro" \ --user "$(id -u):$(id -g)" \ --workdir="/home/$(id -un)" \ -v "/home/$(id -un):/home/$(id -un)" \ "${IMAGE}" bash
镜像不能及时更新
容器还需要自己管理
我的痛点也是大家的痛点,DevContainer 是完美的方案
VsCode 安装 DevContainer
编写容器配置,打开工作区, VsCode 自动构建镜像,启动容器,权限问题一并处理
附加方案
在本地使用很难同步,在最便宜的 VPS 上使用该方案很完美,只需本地安装 VsCode