本文档解释了 HugoSites 和 Site 结构体的作用和结构,它们是 Hugo 网站生成过程中最基础的组成部分。HugoSites 管理多个 Site 实例(通常每个语言一个),而每个 Site 代表一个独立的 Hugo 网站,包含其自己的内容、配置和输出。
有关整体网站生成过程的信息,请参阅 网站生成。
HugoSites 作为多个 Site 实例的容器,协调它们之间的操作并管理共享资源。每个 Site 维护其自己的页面、分类、菜单和其他网站特定的数据。
来源: hugolib/site.go98-136 hugolib/hugo_sites.go53-104
| 组件 | 类型 | 目的 |
|---|---|---|
Sites | []*Site | Site指针的切片,通常每个语言一个 |
Configs | *allconfig.Configs | 所有网站的配置 |
currentSite | *Site | 当前渲染的站点(模板中很重要) |
pageTrees | *pageTrees | 包含页面树,用于高效查找页面 |
data | map[string]any | 从数据文件中加载的数据 |
cachePages | *dynacache.Partition | 页面集合的缓存 |
buildCounter | atomic.Uint64 | 跟踪构建调用 |
来源: hugolib/hugo_sites.go53-104
| 组件 | 类型 | 目的 |
|---|---|---|
pageMap | *pageMap | 管理页面组织和访问 |
language | *langs.Language | 站点语言信息 |
h | *HugoSites | 指向父 HugoSites 的引用 |
taxonomies | page.TaxonomyList | 分类数据 |
menus | navigation.Menus | 站点导航菜单 |
home | *pageState | 指向主页的快捷方式 |
renderFormats | output.Formats | 需要渲染的输出格式 |
publisher | publisher.Publisher | 用于发布渲染后的页面 |
站点是在初始设置阶段使用 `NewHugoSites` 函数创建的,该函数会创建 `HugoSites` 容器及其 `Site` 实例。
来源: hugolib/site.go143-453 hugolib/hugo_sites.go337-452
初始化过程包括
每个 Site 使用 pageMap 来高效地组织和访问页面。页面映射使用基于树的多维数据结构(维度包括 kind、语言、路径),以便快速查找
来源: hugolib/site.go281-282 hugolib/page.go93-115
Site 提供了几种访问页面的方法
| 方法 | 目的 |
|---|---|
Pages() | 当前语言的所有页面 |
RegularPages() | 仅常规内容页面 |
AllPages() | 所有站点的所有页面 |
AllRegularPages() | 所有站点的所有常规页面 |
GetPage() | 按路径获取特定页面 |
来源: hugolib/site.go592-635 hugolib/hugo_sites.go198-231
构建过程由 HugoSites 协调,并由各个 Site 实例执行
来源: hugolib/hugo_sites_build.go60-1000 hugolib/site_render.go34-222
构建过程包括以下关键步骤
每个 Site 可以以多种输出格式(HTML、JSON、XML、AMP 等)渲染内容
来源: hugolib/site.go799-836 hugolib/site_render.go70-191
渲染过程的关键方面
Site 决定渲染哪些输出格式HugoSites 通过其 Sites 切片管理多个语言的站点。每个 Site 对应一个语言
来源: hugolib/site.go842-845 hugolib/hugo_sites.go291-302
每个 Site 通过其 language 字段了解其语言,页面在页面树中按语言进行组织。AllTranslations() 和 Translations() 方法允许访问翻译。
Site 提供了访问各种类型站点数据的方法
| 方法 | 目的 |
|---|---|
Data() | 访问从 data 目录加载的数据 |
Params() | 从配置中访问站点参数 |
Taxonomies() | 访问分类列表 |
Menus() | 访问站点菜单 |
Hugo() | 访问 Hugo 构建信息 |
Home() | 访问主页 |
LastChange() | 获取最后修改日期 |
来源: hugolib/site.go459-529 hugolib/hugo_sites.go190-195
许多资源密集型操作是按需加载的
HugoSites 包含一个 fatalErrorHandler 来管理构建过程中的关键错误
来源: hugolib/hugo_sites.go149-180
HugoSites 使用缓存来提高性能
来源: hugolib/hugo_sites.go75-77
在模板中,页面通过 .Site 对象上的方法来访问
在代码中,HugoSites 通常这样创建和构建
来源: hugolib/site.go143-144 hugolib/hugo_sites_build.go60-61
在服务器模式下,HugoSites 只创建一次,然后针对更改进行重建
来源: commands/commandeer.go168-177
HugoSites 和 Site 是 Hugo 架构中的核心组件
HugoSites 管理多个 Site 实例并协调构建过程Site 代表一个特定语言的站点,拥有自己的内容和配置这些组件共同实现了 Hugo 强大的多语言、多输出站点生成功能。