Hugo Modules 主题安装和管理:以 Docsy 为例

Hugo主题安装方式

目前主题的安装方式是怎样的?例如远程主题、或类似Jekyll的gem-based,或还有其他方式。为何在本站根目录中没有发现hugo建站相关的程序文件和theme 主题目录?

我们寻找Hugo的配置文件的位置,为了查找静态页面所保存的文件目录publishDir=public的配置,可能有几个文件与该配置相关:

config/_default/config.toml
config/_default/config.yaml
config/_default/config.json
config/production/config.toml
config/production/config.yaml
config/production/config.json

如果不采用docker方法安装,需要删除docker相关文件吧,包括哪些文件清单?

A: 通过Hugo Modules的方式安装的,配置文件就是hugo.yaml,没必要去改静态页面所保存的文件目录,部署是自动的,不需要手动操作,docker文件可以删除,不影响使用。

从go.mod 和 hugo.yaml 文件可以看出来,通过 Hugo Modules 引入了 Docsy 主题(版本 v0.11.0)。由于主题文件并未直接放在项目目录中,而是通过模块系统加载,因此无法直接在项目目录中看到 themes/docsy 文件夹。

go module 安装和管理

Hugo Modules 使用了 Go 的模块系统来管理主题依赖。从配置文件可以看到:

  1. hugo.yaml 中声明了主题模块:
module:
  imports:
    - path: github.com/google/docsy
  1. go.mod 中指定了具体版本:
require github.com/google/docsy v0.11.0

go.mod 是用于 Go 编程语言的模块依赖管理文件。它指定了模块的名称和依赖项的版本,确保在构建时使用正确的库版本。

请注意,在 Markdown 中的代码块标记里,你应该使用语言代码来高亮代码。对于 go.mod 文件,使用 go 作为代码块的标记是适当的。

go module 目录

通过以上方式安装的主题,我们可以找到主题实际被存储的缓存目录,显示 Hugo 存储其缓存(包括模块)的完整路径。

hugo-docsy % hugo config | grep cacheDir
    dir = ':cacheDir/:project'
    dir = ':cacheDir/:project'
    dir = ':cacheDir/:project'
    dir = ':cacheDir/:project'
    dir = ':cacheDir/modules'

hugo-docsy % ls ~/Library/Caches/hugo_cache/

PaperMod	blog		hugo-paper	modules

Hugo 从本地缓存目录加载主题,在 macOS 上,Hugo 的缓存通常位于:


cd ~/Library/Caches/hugo_cache/modules/

ls ~/Library/Caches/hugo_cache/modules/filecache/modules/pkg/mod/github.com/google/docsy/@v/

@v % ls
list		v0.11.0.lock	v0.11.0.zip
v0.11.0.info	v0.11.0.mod	v0.11.0.ziphash

要查看 Docsy 主题的实际文件内容,需要解压缓存中的 v0.11.0.zip 文件。主题文件在:

这个目录包含了完整的 Docsy 主题源码,包括:

  • layouts 模板
  • assets 资源
  • static 静态文件
  • i18n 翻译文件
  • 等所有主题组件。

如果你决定爆改这款主题,那么可以在以上的缓存目录中找到zip文件,复制出来解压缩,将需要更改的文件复制出来到项目相应的子目录中,然后依据个人喜好爆改它。

go.mod 方式的优点:

  • 主题作为模块依赖管理,版本可控
  • 主题文件不直接存在于项目中,保持项目结构清晰
  • 可以同时使用多个主题模块
  • 主题更新只需要修改版本号
  • 多个项目可以共用缓存的主题文件

这是 Hugo 推荐的现代主题管理方式,比直接把主题文件放在 themes 目录更灵活和规范。