Published on

Hugo vs Zola

Authors
  • avatar
    Name
    ttyS3
    Twitter
对比项HugoZola
实现语言GolangRust
主题数量丰富较少
模板引擎Go TemplateTera
CSS 支持SASS / SCSS, PostCSSSASS / SCSS
Page Bundle 支持YesYes
Front Matter 支持TOML/YAML/JSON/ORGTOML/YAML
子目录支持自动需要手动给每个子目录添加 _index.md
生成 URL 配置支持不支持

Zola uses the Tera template engine, which is very similar to Jinja2, Liquid and Twig.

关于 Front Matter, 刚开始 Zola 是极力不想添加 YAML 支持的, 后面添加了, 但是并没有在文档里面说明 (作者极力不提倡使用).

事实上我觉得写 markdown 用 TOML Front Matter 才是反人类.

Hugo 通通 pipeline 可以支持很多东西: https://gohugo.io/hugo-pipes/

而 Zola 则局限于 SASS 的 Rust 绑定, 今天无法支持 PostCSS : https://zola.discourse.group/t/add-postcss-support/556

子目录支持方面, Zola 也是很糟心.

需要给每个子目录添加 _index.md 文件, 否则不会索引到 pages.

+++
paginate_by = 4
sort_by = "date"
transparent = true
+++

注意这里的 transparent = true 一定要添加. 要不然你在模板里面无法看到子目录的内容. paginate_by 也一定要添加, 要不然不会有 paginator

这是一种很奇怪的设定, Zola 和 Hugo 这方面是反的. Hugo 是默认支持子目录, Zola 则是默认不支持. 维护众多子目录下的 _index.md 文件是很糟糕的, 从这方面来说, Hugo 更实用.

Zola 的作者似乎比较武断, 表示无意支持 URL 生成规则: https://github.com/getzola/zola/issues/635

而 Hugo 则支持灵活地模板规则. 比如 配置为 /post/:filename//posts/sub1/sub2/my-post-filename.md 可以生成 /post/my-post-filename/index.html

而 Zola 则只能按照目录结构生成 /posts/sub1/sub2/my-post-filename.html

目前看来, Zola 也已经不再是新项目了, 但是作者对于一些东西的接纳程度, 仍然是制约其发展的主要因素. 社区的力量应该还是比较强大的, 但是作者的接纳程度, 可能是一个问题.

而 Hugo 可能在朝着另一个极端在发展, 不断地在添加新功能.

综合起来, 除非你对 Zola 有特别偏爱, 否则不要使用 Zola. 大部分情况下, Hugo 能很好的满足需求, 而 Zola 则不一定.

Refs

https://jamstack.org/generators/

https://gohugo.io/content-management/front-matter/

https://www.getzola.org/documentation/templates/pagination/

https://www.getzola.org/documentation/templates/overview/

https://www.getzola.org/themes/

https://themes.gohugo.io/