使用 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,请不需要该标志。但是现在服务器已经设置好,正在监听工作空间中的文件和目录,并且可以看到您的本地编辑结果重新加载。