博客同步更新: https://keelii.github.io/2016/10/25/migrating-from-octopress-to-hugo-smoothly/git
自重新博客创建以来一直用 Octopress 这个博客框架来搭建静态文章页面。漂亮的默认主题、方便的发布到 github page 等功能吸引了我github
但就在最近由于家里的用 Macbook,恰好升级到了新版的 Sierria,杯具的是以前安装的 Octopress bundle 都失效了。调试了好久还没把环境搭建好,再加上以前发现 Octopress 的 Markdown 解析器老报错,因而就决定要更换一个配置安装简单点的博客生成器了编程
在参考了这个网站上的各类生成器后 staticgen,果断选择了 Hugo。没有什么特殊缘由,下载安装试用一下就明白了。Hugo 因为是 Go 语言写的,因此你只须要下载好官方给的二进制可执行文件就能够了,不再用安装各类依赖,而后各类换源什么的乱折腾了。这一点就足以让我转入 Hugovim
因为本身仍是比较喜欢 Octopress 默认的这套主题,因此在读过 Hugo 开发文档后,在严格尊重原主题的原则下修改了部分加强样式,制作了一个适配 Hugo 的 Octopress 主题。虽然 Hugo 官方有一个适配 Octopress 的主题 hugo-octopress 可是对原主题改动太多,我并不喜欢markdown
Octopress 使用的文章描述头是 yaml 格式的,须要转换成 Hugo 的 toml,本身手动写了个 NodeJS 脚本 来完成这个工做,基本上很轻松就完成了。注意:建议放在 content/archives
目录下面,这样的话原来的文件目录和新的就是一致的了框架
再吐槽下 md 文件名,Octopress 默认是生成时间为前缀的,如:2016-06-13-name.markdown
。 若是转移到 Hugo 永久连接还要保持原来文件名格式的话就得把这个前缀干掉(name.md
),这样的话排序就乱了。在各类编辑器、文件夹中不按建立顺序排序,看起来很别扭也不方便编辑器
考虑到之间已经写过不少文章了,搜索引擎都已收录,因此要保持原来的文章连接格式不变。在 Hugo 配置文件里面加上这段,使用文件名作文章永久连接:post
[permalinks] archives = "/:year/:month/:day/:filename/"
Octopress 默认的存档地址是 archives
,这个咱们能够直接在 Hugo 博客目录 content 里面新建一个目录名为 archives 就能够了,之后新建文章都以这个 Section 为准:hugo new archives/your-post-name.md
测试
Octopress 默认的是 atom.xml
,然而 Hugo 中默认的是 index.xml
。不过咱们能够在 Hugo 中作个配置,和之间保持一致:网站
RSSUri = "atom.xml"
然而实际测试的时候在模板里面调用 {{ .RSSlink }}
始终都返回 index.xml。手动把模板里面的 RSS 连接改为 {{ .Site.BaseURL }}atom.xml
竟然能生效?!这估计是 Hugo 的一个 bug。好在被发现了,要否则新老订阅 RSS 地址不同事情就比较麻烦了
Octopress 默认的格式是 posts/2
,Hugo 中是 posts/2
一样须要加个配置:
paginatePath = "posts"
这几个概念主要在修改主题的时候能用到
相似 markdown 文件的配置描述,用来配置文章的标题、时间、连接、分类等元信息,提供给模板调用
+++ title = "post title" description = "description." date = "2012-04-06" tags = [ ".vimrc", "plugins", "spf13-vim", "vim" ] categories = [ "cat1", "cat2" ] +++
在 content 下面的一级目录,一般有分类的概念,但只是文件夹维度的物理隔离
若是没有为文章指定 type 配置,文章默认就属于当前属的 Section,type 能够在 Front Matter 中指定,而
Section 不能够
新建文章时候的默认模板,会带有指定的 Front Matter 头
分类、标签、系列这种描述文章属性的都属于 Taxonomy Terms
Hugo 确实是一个不错的博客框架,配置简单、功能强大,不少东西都以「惯例」默认提供了,好比内置 TableOfContents,用来写博客足亦
不过因为是 Go 语言写的,不少人并不知道有这么好用的一个东西,因此社区并非很好。这可能就是所谓的编程的帮派论吧