书接上文,在配置完Caddy之后,我发现这个博客有很多地方还是链接了HTTP的内容(比如外部的CSS/JS库之类的),导致页面显示不完整。 想调整的时候,发现Octopress已经停更5年了1,所有的依赖都是陈旧的,这对我在新环境中安装产生了较大的麻烦,而且Octopress的最后版本也不是特别令人满意。
自然而然地就想要替换掉Octopress,梳理了一下,对于博客网站系统,我的需求是:
- 全部由静态网页构成
- 跨平台,易于安装配置
- 社区活跃,解决问题比较容易
- 速度快,Octopress的生成挺慢的
- 在提供博客常用功能的同时,扩展性好
由于Octopress可以和Jekyll共享插件,所以Jekyll是我第一个考虑的替代。 毕竟Jekyll也是ruby生态,迁移应该是及其简单的。 但是奈何我现在大部分时间在使用Windows,虽说Windows现在有WSL2,但那个真的只是个玩具,而且还影响到我其他工具的使用(简单来说,开启WSL2就意味着开启Hyper-V,此时Windows也运行在虚拟环境中,且Hyper-V并没有为Windows虚拟环境开放虚拟化指令,而是开放了Microsoft’s WHP APIs2,这就意味着VMware这类虚拟机只能运行在用户态3,导致其虚拟机的效率降低、功能受限。还导致一些使用旧版VirtualBox的应用无法运行,比如各种安卓模拟器。我权衡再三,还是放弃了WSL2,这也意味着不能在Windows里面用docker desktop)。
所以说成也ruby,败也ruby,ruby在Windows上着实不好用,这是我放弃Jekyll的一个重要原因。 Hexo也是我曾经重点考虑的替代方案,Hexo满足我上述所有的需求,Hexo开箱即用的功能比Hugo更全,更好用一些。 个人感觉Hexo的扩展性也是强于Hugo的。
但是我还是选择了Hugo,因为偏爱Go啊。当然Hugo本身功能也足够强大,满足我的上述要求,而且性能卓越。 因为使用Go语言编写,Hugo的安装极其简单,如果不用包管理的话,直接在GitHub上面下载二进制文件就行了,这是Hexo望尘莫及的,Nodejs的node_modules简直是噩梦。 这也是我非常喜欢Go语言的一点,就是干净,没有各种零碎小文件。 当然,这也使得Hugo的扩展性受限制,只能通过shortcode去完成各种扩展。
在把博客从Octopress迁移到Hugo的过程中,Hugo在以下几点中让我印象深刻。
1. Page bundle
Page bundle是一个非常实用的方案,在Octopress中,一篇日志就是一个Markdown文件,所有的资源(比如图片等)都存在静态文件目录里,这就使得管理上有些不方便。
而Page bundle则是创建一个日志的文件夹,正文主体命名为index.md
,所有在这篇日志中用到的资源都放在这个文件夹下。
这样就不必去管理一个集中的静态文件目录,在文中引用的时候也更为方便,直接使用相对路径即可,同时也方便VSCode的代码提示。
2. Section
在Octopress中,是没有Section这个概念的,所有文章都放在_posts
下,属于完全扁平的结构。
而在Hugo中,由于Section的引入,文章就存在了树形结构,从而可以实现更加精细化的展示和管理。
引用一张官方文档的图来说明一下Section对于整个站点管理的作用
3. Shortcodes
刚才提到,想要在Hugo中扩展功能,只能通过自定义shortcode去实现。 通过在Markdown中调用自定义的shortcode,我们可以实现自己想要的功能。 同时,shortcode可以嵌套,来实现更加复杂的功能;也可以内联,用来直接在Markdown里使用Go template。 官方提供了一些实用的shortcode,比如快速插入YouTube的视频等。 我自己在迁移的过程中也写了几个shortcode,比如快速添加表情包。
4. Hugo缺点
不得不说,Hugo的缺点也是令人印象深刻,其中最大的缺点,就是死板,一点也不灵活,这点和Go语言的静态性是分不开的。
在使用中就发现,想要自定义功能就只能使用shortcode,而shortcode本质也是Go的template,在语言表达力上非常受限,所以往往一个简单的逻辑却需要很多行指令去实现。
而想要在Markdown中直接使用HTML,还得把markup.goldmark.renderer.unsafe
的选项打开,或者使用shortcode去实现。
另一个则是不支持codeblock,虽然Hugo提供了一个highlight的shortcode,但是从功能上远不及codeblock,有些功能还得自己实现,比如加caption。
总体来说,Hugo是一个有着很明显的Go语言特色的静态网站生成工具,优缺点都很明显,如果是Go的粉丝或者是性能控,可以试试Hugo。 如果是想以方便为重的话,或许可以试试Hexo。 在下一篇文章中我整理了一下从Octopress迁移到Hugo中遇到的一些值得注意的事项。