架设中文 Hugo 站点

基本操作

使用 hugo 架设站点其实并没有什么难度. 只是需要读一下文档.

安装 hugo 没有什么好说的, 就是一个二进制文件, 你可以选择直接下载, 然后扔到 PATH 目录. 相信如果在看这篇文档的话, 对此应该没有什么问题.

和其它类似的现代框架命令一样, 使用 hugo new site <site-name> 命令会自动生成一套脚手架代码.

下一步是选择主题, 本站选用的是 hermit 主题. 其实, 你只需要直接把主题的代码复制下来, 再丢到 themes 目录下即可. 不过, 如果你选择使用 git 来做版本管理的话, 可以尝试 git submodule.

$ hugo new site <site-name>
$ cd <site-name>
$ git init
$ git submodule add --depth 1 --name 'themes-hermit' \
    -- https://github.com/Track3/hermit.git themes/hermit
$ git add .gitmodules archetypes/ config.toml
$ git commit -m 'init commit'

接下来是配置文件 config.toml 的编辑, , 需要查看一下主题的文档. 另外, 虽然默认是 toml 格式. 不过你可以使用 yaml 或者 json, 有些主题有一些属性必须在 config.toml 中配置 menu; 另一些主题则会让你自己创建 layout 下面的一些页面.

我觉得比较重要是的 baseURL, 最好还是设为 "/", 而不要像上面那样写死. 毕竟建站换域名其实更常见, 更不要说测试预览很多部署环境都偏向于使用测试域名. 写死域名并不利用这些场景的部署.

多语言支持

有一点在官方的多语言支持文档里没有讲到. 就是主题的支持情况. 对于之前我提到的 hermit 主题来说. 比较有趣的一点就是你需要设定 languageCode 就是类似于:

[languages.en]
languageName = "English"
contentDir = "content/en"
languageCode = "en"
weight = 20

这个和主题的实现有一点关系.

实现多语言还要在多域名和多路径两种风格之间做出选择. 个人觉得没有太大必要使用两个域名来表示两个语言频道. 中日韩这种多字节文字的可能还需要再设置 hasCJKLanguage. 最后应该差不多这样:

isMultiLingual = true
defaultContentLanguage = "zh-hans"
hasCJKLanguage = true
defaultContentLanguageInSubdir = true

日期格式的话, 暂时就不要指望 二〇〇〇年 这种复杂格式了.

org mode 和 ox-hugo

如果跟我一样小众到使用 org mode 的话, 建议使用 ox-hugo 来做导出. hugo 默认的 goorg 并不是百分百兼容 org mode. ox-hugo 有一些很有意思的设计, 比如说 CLOSE 映射为 hugo 里的发表日期, TODO 作为 hugo 中草稿标志.

这里提一下 ox-hugo 的作者对于 CJK 的支持倒是很热心.

一些问题

一些不足还是需要讨论的. 任何工具都有一些局限性, 个人不能认同在小众工具的相关文字中不提及其不足之处.

比如说各种主题对于多语言的支持其实需要你去略略观察一下相关的各主题具体的实现. 比如说, hermit 代码 使用了 languageCode, 但是最初这个是为了 rss 提供的.

另一个影响使用者更多的是 hugo 的配置项中需要 Weight 参数去指定显示排序. 但说起来 yaml 里面虽然 mapping 顺序没有被保存, 但是 sequence 是有顺序的; tomljsonarray 其实也类似. 所以, 理论上并不需要一个单独的 Weight 来做这件事情.

上面两个问题, 其实还涉及到一个更深层的问题. 就是 hugo 还是很依赖于 golang 的默认实现, 并没有为实现功能去加更多的代码, 当然, 这个有另一方面仍是有好处的.

结语

大致就是这些了. 部署时, 比较流行的是 githubnetlify 相配合, 基本上可以实现代码管理和自动化发布.


1057 字

更新于 2021-03-09 00:21 +0800