IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    从 Hugo 迁移至 Zola

    inhzus发表于 2025-03-08 10:50:00
    love 0

    本博客的主题之前是基于 futu 魔改而来,不是自己写的代码,条理梳理得就比较差。借这次迁移 SSG 重新梳理了代码,并记录下遇到的问题。

    Zola vs. Hugo

    实际体验下来,Zola 相比 Hugo 并没有显著的提升。

    最可圈可点的性能,只有在博客数量过多时,才能感受到明显的差异。

    在社区方面,Hugo 可查询到的资料和插件非常丰富,相比之下 Zola 则需要一些动手能力才能搞定。且目前看起来 zola 的 GitHub repo 并不是非常活跃,待解决的问题数量不少,很容易找到贡献的机会。

    Tera

    基于 Rust 的 Tera template 语言,在语法上和 Hugo 支持的 golang text/template & html/template 基本类似。

    不过,Tera 对「继承」的支持更加完善,支持在子页面 extend 父页面,定制其中一部分 block (不论是一系列变量,还是页面内容),且可以通过 super() 方法调用父 block 逻辑。

    于是可以做到:

    <!-- base.html -->
    {% block init %}
      {% set title = config.title %}
      {% set author = config.author %}
    {% end block %}
    
    <title>{{ title }}</title>
    <meta author="{{ author }}"/>
    
    <!-- post.html -->
    {% block init %}
      {{ super() }}
      {% set title = page.title ~ " | " ~ config.title %}
    {% endblock %}
    

    在 base.html 中声明需要使用到的变量;在对应到不同的实现中(如 index/post/archive),调用 super() 接受大多数默认变量,修改当前页面需自定义的部分。

    通过以上办法,不必再像大多数 Hugo 主题一样,在一份 html 中,进行所有页面类型的分类判断,将大量的代码堆在一起,之后又由于代码过长拆成若干个模板文件(如 header.html,meta.html,甚至 description.html)七零八落,维护起来相当痛苦。

    问题

    Permalink

    Zola 框架提供的绝大多数链接都是 permalink,也就是都要带有 base_url。举例如 base_url = https://example.com/blog,文章的相对链接为 /posts/welcome.md,透过 get_url(path="@/posts/welcome.md") 只能获取到 https://example.com/blog/posts/welcome/,而无法方便地获取到到根路径的相对路径 /blog/posts/welcome/。

    Syntax Highlighting

    Zola 的代码高亮主题配置与 Hugo 不同,如果需要自定义主题,需要使用 textmate .tmTheme 或 sublime .sublime-theme 配置,或基于自定义的一套 css class 实现相应的高亮风格,迁移起来需要一定的成本。好在其内置了我比较喜欢的 GitHub 风格。

    Builtin Functions

    Zola 缺乏诸多常用的内置函数或模板,如 google analystics、git info、TOC 等,均依赖于用户自己实现。

    且仅从配置项就可看出 zola 在某些功能上缺乏自定义选项,如 markdown、goldmark、footnotes 等等。

    总结

    不过总的来说,zola 还是能够胜任我的这种比较简洁风格博客的使用。

    我完全重构版本的主题 repo:zola-futu



沪ICP备19023445号-2号
友情链接