Posthaven to Hugo

前不久博客刚刚从wordpress迁移到Posthaven,在使用了两个月之后,还是从Posthaven流失了。

Posthaven的问题

起初没太注意文章的url,有一次写完发布之后,发现url居然是文章标题的拼音。对于英文内容来说,这样的url没问题,但是对中文来说,这样一大串不知所云的url,简直是个灾难。有个办法可以解决,就是发布的时候把期望的url作为文章标题,等发布之后再来把标题更新成中文。

Posthaven的页面引入了twitter和facebook的js,由于一些众所周知的原因,会导致博客无法顺利的打开。如果要去掉的话,需要修改主题。但是Posthaven的主题是用的liquid模版。修改的话有一定的门槛,至少要学会liquid。

类似的还有不少小问题,这些问题都有一些奇技淫巧可以解决。但是作为用户有没有必要这样折腾呢?如果还是要自己操心,那为什么不选择wordpress这些?

另外,Posthaven所标榜的“Last forever”或许只是个不切实际的幻想。一方面公司并不能保证永久运行下去。另一方面,万一哪天posthaven被屏蔽了,也就完蛋了。

需求很简单

我只需要一个minimal viable product:

一直有个想法,既然这些都不能很好的满足需求,那为何不自己造个轮子?现在web framework都已经非常成熟了,实现起来应该也不会太难。org-mode的问题可以用scala写个parser解决。但是,自己造轮子要占用大量的时间。现阶段的时间这么紧张,把宝贵的时间花在这上面是不是值得?

那除了wordpress,还有什么选择?Jekyll, Hexo, Hugo。Jekyll的编译速度太慢,Hexo是nodejs的框架,学习成本略高,而且hexo的主题洋溢着一种qq空间的感觉。那就只有Hugo了。

Hugo也不完美

Hugo, Jekyll和Hexo这类博客最大的优点在于生成的是静态页面,如果博客部署的机器跪了,重新换台机器部署一下就行了,迁移起来非常方便。Hugo可以在本地渲染,而且支持live reload,写完保存文件在浏览器里就可以看到了。这一点是之前从未有过的体验。

虽然基本体验OK,但是Hugo也存在不少问题。

如果某篇文章太长,不希望在首页全部展示的时候,WordPress和Posthaven都支持插入Read More标签,这样在首页就可以只展示标签之前的部分。Hugo对于这个功能的支持,在markdown格式里面是完美的,如果用org-mode或者html,就比较令人蛋疼了。对于org-mode,文档里面写的是要用 #more ,但实际上还是要用markdown的方法。对于html,我是压根儿就没找到支持的方法。

Hugo的文档比较奇怪,给人的感觉是放着一些通俗易懂的说法不用,而是故意用了一些看起来更高深的词汇,但是对用户来说不够友好。比如taxomony,slug这些概念。

虽然Hugo支持org-mode,但是支持的并不够完善。很多标准的org-mode写法,都不能用。比如需要直接输出html,却不能用org-mode的 #+BEGIN_HTML#+END_HTML 。代码高亮需要使用hugo的short code,在org-mode里面一个简单的 #+BEGIN_SRC 不就可以搞定了么。

目前来看,hugo已经是能用的唯一方案了。就这样吧,后面如果实在忍不了的话,还是得自己造轮子。