在需要构建自己博客的时候 使用开源的CMS或者静态网页生成器通常是最好的选择 尤其是对于不喜欢JS的用户而言
CMS: Content Management System 内容管理平台 一般会包含完整的前后端、权限管理和数据库整套的设施 但是只是写一点静态内容的用户来说 显得太臃肿了 而且不是基于文本的内容 不方便使用Git做版本管理 不过有兴趣的话 可以看看这里的推荐
那么优先排除掉了CMS 就进入了静态网页生成器的选择 同时因为对于Markdown的偏好 选出来了这份不错的候选单
在上面那份候选单之前 我曾使用过一个JS库来构建博客: docsify 它的最大优势是不需要先生成静态网页 而是运行时构建网页的 方便早期不懂GitHub Action的时候 作为过渡选项
不过运行时构建的代价就是 首次打开特别慢 文件越多越明显
VuePress
当我放弃 docsify 的时候 发现了 VuePress 它看上去不错 特别是刚好 VuePress@next (2.x-beta) 出了 可以用TS来写一些配置文件
VuePress的优势在于
- 默认的主题美观
- block级别的高亮拓展语法
- 可以直接引用代码文件
对于文档而言 它足够了
不过对于博客而言 它有点不对味
于是在内容多起来的时候 并不能直接发现新增了什么 这与博客放置新鲜内容的想法有些违背
Jekyll
放弃 VuePress 的原因主要有两点
- VuePress 太像文档而不像博客 切换到一个类似博客的主题需要重构 代价太高
- 使用的 VuePress@next (2.x) 仍还是 beta 版本 blog timeline 风格插件不可用 只有VuePress1.x版本可以用 降版本就不能使用TS了
当时 VuePress 还有个问题就是 它的特性好用到我不好做迁移 所以在用 Jekyll 的时候 就直接没有迁移原来的内容
这个时期之后 便有了远离JS的想法 候选单上的就只剩下 Jekyll 和 Hugo
然后简单看了一下 Hugo 的文档 发现似乎整体比较复杂 就先选了简单一点的 Jekyll (正好当时Ubuntu20.04自带了Ruby 所以就用了)
Jekyll有自己的Liquid语法 能做一些比较复杂的事情 但我并不需要 我只需要简单的timeline
Hugo
淘汰Jekyll的原因有点特别 产生这个想法是因为将Ubuntu升级到22.04之后 Ruby/Gem 的那台工具依赖出问题了 弄了半天还是不能本地build
其他的原因还有
- 不支持LaTeX公式
- 根据tags和categories作分类麻烦
- 摘要不可控
在我重装系统 使用Linux Mint之后 系统没有自带Ruby 同时下载的docker镜像用于build再次出错后 我将目光转向了Hugo
目前看来 Hugo 是一个不错的选择 对于上述的Jekyll问题能有不错的解决 能够满足我的初衷 而且从Jekyll迁移不过不算特别麻烦
从 Jekyll 迁移
发现官方有相关内容: https://gohugo.io/tools/migrations/#jekyll 看了一眼 似乎质量一般
建议先从主分支切分支出来操作 先删除Jekyll的特有文件 然后使用 hugo new site . --force
创建 Hugo 模板
最大的一个问题在于内容的迁移
- front matter 的改动 原有的layout不能用了 另外需要生成一下时间
- content 的改动 我这里主要是图片引用格式的变化
一点基础的改动可以使用 migrate.py
其他对于 description 之类的改动只能手动操作或者手写脚本处理逻辑了
GitHub Action的部分 可以直接使用Hugo官方文档中的内容
整个一套从 Jekyll 迁移过来 大概用了2-3小时 不算太长 但还是有点折磨 最后是希望一开始就找到能够满足需要的工具 频繁的切换只是徒花时间