Blog.GC

重新搞起(三):从Octopress迁移到Hugo

| Comments

从Octopress迁移到Hugo并不是一件特别简单的事情。 首先这两个系统的模板代码完全不一样,需要重新改写。 其次是Hugo默认会删除Markdown中的所有HTML片段,当然也不支持Liquid Tags(即{% %})。 最后是Octopress里的一些功能已经陈旧,有些调用其他服务的API不能完全照搬,需要检查一下是否有更新。

在下文中,我记录了一些我在迁移过程中遇到的坑,以及值得注意的地方。

我在迁移的时候参考的两篇文章12都讲到了Octopress和Hugo的文件名和路径的不同,以及如何批量修改。 但是实际上并不需要那么复杂,我们可以保留原始的文件名以及Permalink,只需要设置slug即可。 在Markdown的front matter中定义

---
draft: true
slug: foobar
comments: true
---

随后在config.toml中设置

[permalinks]
  posts = "/:year/:month/:slug/"

即可保留原来的路径格式了。

2. 关于layout和theme

Hugo中有两个地方可以定义主题,一个是主目录下的layout,另一个则是新建一个theme。在快速开始的教程中,Hugo是拉取了一个现有的theme。 但如果我们是迁移原有的主题,而且并没有想要共享的愿望的话,实际上可以直接在layout目录下编写,我感觉更加方便直观。

👆 此条纯属个人见解,因为我不爱换主题。

3. 关于Octopress的SCSS

Hugo提供SCSS的编译方案,但是需要安装Hugo的extended版本,默认的版本是不支持编译的。 同时,由于Octopress的SCSS使用了Compass,这导致直接把SCSS拷贝到Hugo是无法编译的。 这里我采用的方法是,直接用了编译后的CSS,随后进行修改更新,并删去不需要的部分。 当然更好的则是改SCSS,解决编译问题。

4. 关于code fence选项

Hugo不支持codeblock,但是提供了highlight的shortcode来处理代码片段的高级功能。 但是实际上我们可以直接在code fence后面设置highlight的选项来达到同样的目的,比如 ```go {linenos=false}就可以覆盖默认选项,关闭代码行数。

5. 关于两种shortcode的调用方式

Hugo提供两种shortcode的调用方式,分别是{{< shortcode >}}{{% shortcode %}},测试下来前面一种可以返回HTML,而后面那种返回的HTML依旧会被删除。

6. Markdown中直接插入HTML片段

刚才提到,Hugo默认会删除Markdown中的HTML片段。可以通过两种方式实现这个目标,第一个是使用shortcode,其实现只需要{{ .Inner }}即可3。另一种则是设置markup.goldmark.renderer.unsafe为true。

7. 关于category

想要自定义category的页面,可以在layout目录下建立categories目录,并实现list.html

8. 关于RSS

Octopress的RSS默认名称为atom.xml,但是Hugo的RSS文件名为index.xml且不能更改。所以需要在HTTP服务器上做好跳转。

10. 关于archetype

Hugo也可以自定义新建的Markdown的模板,位于archetypes/default.md。根据content类型不同,可以定义不同的archetype

11. 关于Disqus功能的迁移

Hugo内置了Disqus的inner template,但是只提供评论功能。Octopress中的显示评论数量的功能需要自己实现,可以照搬Octopress生成的JS,但是需要注意Octopress中使用了data-disqus-identifier,如果不能确定其定义的话,建议改成data-disqus-url并赋值.Permalink

12. rsync编码转换

由于我原来一直使用MacOS,所以没注意到这个问题。如果在Windows上使用rsync(我用的是MinGW下msys的rsync),由于Windows默认是GBK编码,而服务器Linux上则是UTF-8,如果不加转换则会导致乱码从而无法正常获取页面。 因此我们需要在rsync的参数中添加--iconv=GBK,UTF-8

13. Hugo支持Emoji 🐶

在template中可以使用emojify函数,但是如果想在在Markdown中直接支持的话,需要打开enableEmoji选项。 同时分享一个Emoji大全:https://www.webfx.com/tools/emoji-cheat-sheet/

14. chroma支持的语言列表

Chroma是Hugo用来进行语言高亮的程序,其支持的语言列表:https://github.com/alecthomas/chroma#supported-languages

15. 分享按钮

原来的百度分享,因为早已无人维护,连HTTPS都不支持,只能舍弃。现在我是自己写了分享按钮,并不复杂,各个APP都提供了分享的API,除了微信,微信只能创建二维码。 但是在这个过程中我一直在思考,到底需不需要分享按钮,很纠结。 一方面只想把这个博客作为自己的后花园,居于互联网世界的一个角落,如果有幸被人搜索到了,那就是缘分。 而另一方面,有时候确实希望分享自己的文章,向外展示自己。 纠结并没有得出结论,于是先实现了放着吧😂。


  1. https://parsiya.net/blog/2016-02-02-from-octopress-to-hugo/ ↩︎

  2. https://retifrav.github.io/blog/2019/03/17/migrating-from-octopress-to-hugo/ ↩︎

  3. https://anaulin.org/blog/hugo-raw-html-shortcode/ ↩︎

Comments

comments powered by Disqus