使用 Hugo 模块
先决条件
初始化新模块
使用 hugo mod init 来初始化一个新的 Hugo 模块。如果无法猜测模块路径,您必须提供它作为一个参数,例如:
hugo mod init github.com/gohugoio/myShortcodes
还可以参考命令行文档。
使用模块作为主题
使用模块作为主题的最简单方法是在配置文件中导入它。
- 初始化 Hugo 模块系统: hugo mod init github.com/<your_user>/<your_project>
- 导入主题:
module:
  imports:
  - path: github.com/spf13/hyde
[module]
[[module.imports]]
    path = 'github.com/spf13/hyde'
{
   "module": {
      "imports": [
         {
            "path": "github.com/spf13/hyde"
         }
      ]
   }
}
更新模块
当您将模块导入到配置文件中时,模块将被下载并添加到您的项目中,请参阅模块导入。
要更新或管理版本,可以使用 hugo mod get。
以下是一些示例:
更新所有模块
hugo mod get -u
递归更新所有模块
hugo mod get -u ./...
更新一个模块
hugo mod get -u github.com/gohugoio/myShortcodes
获取特定版本
hugo mod get github.com/gohugoio/myShortcodes@v1.0.7
还可以参考命令行文档。
在模块中进行更改并进行测试
一种在项目中导入的模块进行本地开发的方法是在 go.mod 中的源代码所在的本地目录下添加 replace 指令:
replace github.com/bep/hugotestmods/mypartials => /Users/bep/hugotestmods/mypartials
如果您已经运行了 hugo server,配置文件将重新加载,并将 /Users/bep/hugotestmods/mypartials 加入到监视列表中。
除了修改 go.mod 文件之外,您还可以使用模块配置中的replacements选项。
打印依赖图
使用 hugo mod graph 命令从相关模块目录运行,则会打印依赖图,包括 vendoring、模块替换或禁用状态。
例如:
hugo mod graph
github.com/bep/my-modular-site github.com/bep/hugotestmods/mymounts@v1.2.0
github.com/bep/my-modular-site github.com/bep/hugotestmods/mypartials@v1.0.7
github.com/bep/hugotestmods/mypartials@v1.0.7 github.com/bep/hugotestmods/myassets@v1.0.4
github.com/bep/hugotestmods/mypartials@v1.0.7 github.com/bep/hugotestmods/myv2@v1.0.0
DISABLED github.com/bep/my-modular-site github.com/spf13/hyde@v0.0.0-20190427180251-e36f5799b396
github.com/bep/my-modular-site github.com/bep/hugo-fresh@v1.0.1
github.com/bep/my-modular-site in-themesdir
还可以参考命令行文档。
将模块转为本地依赖
hugo mod vendor 命令会将所有模块的依赖项写入 _vendor 文件夹,然后在后续的所有构建中都会使用它们。
请注意:
- 您可以在模块树的任何级别上运行 hugo mod vendor。
- Vendoring 不会存储存储在themes文件夹中的模块。
- 大多数命令接受一个 --ignoreVendorPaths标志,它将不会使用_vendor中与给定Glob 匹配的模块路径的依赖项。
还可以参考命令行文档。
整理 go.mod、go.sum
运行 hugo mod tidy 命令来删除 go.mod 和 go.sum 中的未使用条目。
还可以参考命令行文档。
清理模块缓存
运行 hugo mod clean 命令来删除整个模块缓存。
注意,您也可以使用 maxAge 配置 modules 缓存,请参阅文件缓存。
还可以参考命令行文档。
模块工作空间
Go 1.18 中增加了对工作空间的支持,Hugo 在 v0.109.0 版本中得到了良好的支持。
工作空间的一个常见用途是简化站点与其主题模块的本地开发。
工作空间可以配置在一个 *.work 文件中,并通过 module.workspace 设置来激活,为此用途常常通过 HUGO_MODULE_WORKSPACE 操作系统环境变量来控制。
请参阅 Hugo 文档仓库中的hugo.work 文件作为示例:
go 1.19
use .
use ../gohugoioTheme
使用 use 指令,列出您要进行工作的所有模块,并指向它的相对位置。如上例所示,建议始终将主项目 (".") 包含在列表中。
有了这个配置,您可以使用启用了该工作空间的 Hugo 服务器启动:
HUGO_MODULE_WORKSPACE=hugo.work hugo server --ignoreVendorPaths "**"
上面添加了 --ignoreVendorPaths 标志以忽略 _vendor 中的任何以模块路径匹配的依赖项。如果不使用 vendoring,请不需要该标志。但是现在服务器已经设置好,正在监听工作空间中的文件和目录,并且可以看到您的本地编辑结果重新加载。