本文档介绍了 Hugo 如何加载配置文件及其配置系统的内部结构。Hugo 的配置方法旨在提供灵活性,支持多种文件格式、分层组织以及来自不同来源的配置覆盖。有关安全相关配置的信息,请参阅安全配置。
Hugo 的配置系统允许您通过配置文件、环境变量和命令行标志来定义站点的行为。配置系统处理
来源
Hugo 在多个位置查找配置文件,并支持多种格式。
Hugo 支持以下配置文件格式
.toml).yaml, .yml).json)Hugo 按以下顺序查找配置文件
--config 标志提供的特定文件hugo.toml、hugo.yaml 或 hugo.jsonconfig.toml、config.yaml 或 config.jsonconfig/)_default/ 子目录(始终加载)production/,基于 HUGO_ENVIRONMENT)来源
配置加载过程遵循特定的顺序,以确保最终配置能够正确地合并来自所有来源的值。
HUGO_ 开头的环境变量会覆盖相应的设置来源
Hugo 的配置围绕几个关键数据结构进行组织
allconfig 包中的 Configs 结构是所有配置的顶级容器
来源
主要的 Config 结构包含所有按部分组织的配置选项
baseURL、title 等。来源
allconfig 包中的 configLoader 类型主要负责配置加载。
加载过程从一个 ConfigSourceDescriptor 开始,该描述符定义了配置文件的查找位置
此描述符被传递给 LoadConfig 函数以启动加载过程。
来源
核心加载过程由 allconfig 包中的 loadConfigMain 函数处理
来源
Hugo 支持通过以 HUGO_ 开头的环境变量来覆盖配置值。
环境变量必须遵循此模式
HUGO_ 开头例如
HUGO_PARAMS_P1=value 将 params.p1 设置为 "value"HUGO_BASEURL=https://example.com 将 baseURL 设置为 "https://example.com"HUGO_OUTPUTS_HOME=html json 将 outputs.home 设置为 ["html", "json"]来源
加载和合并配置值后,Hugo 通过 CompileConfig 方法将配置编译成更直接可用的形式。
编译过程
结果是附加到 Config 结构中的 ConfigCompiled 结构,其中包含预处理和优化的配置值,可供站点生成过程使用。
来源
Hugo 将主题视为模块,并在模块加载过程中加载它们的主题配置文件。
themes/[theme-name]/ 目录中来源
Hugo 支持多种配置合并策略,这在将主题配置与站点配置结合时尤为重要。
可以通过配置文件中的 _merge 参数控制这些策略。
来源
Hugo 的配置系统通过特定语言的配置提供了强大的多语言站点支持。
每种语言都可以有自己的配置设置,这些设置会覆盖全局设置
Hugo 为每种语言创建单独的配置对象,将特定语言的设置与全局设置合并。
来源
对于复杂的站点,使用配置目录结构可以提供更好的组织性
config/
├── _default/
│ ├── hugo.toml # Base configuration
│ ├── menus.toml # Menu configuration
│ └── params.toml # Global parameters
├── production/
│ ├── hugo.toml # Production overrides
│ └── params.toml # Production-specific parameters
└── development/
└── hugo.toml # Development overrides
配置值遵循此继承路径(从低到高优先级)
config/_default/)config/{environment}/)来源
| 组件 | 描述 | 文件位置 |
|---|---|---|
Config | 包含所有设置的主配置结构 | config/allconfig/allconfig.go99-208 |
RootConfig | 基本配置设置,如 baseURL、title | config/allconfig/allconfig.go526-740 |
ConfigCompiled | 预处理后的配置值 | config/allconfig/allconfig.go478-523 |
Configs | 包含所有配置(包括语言)的容器 | config/allconfig/allconfig.go759-911 |
ConfigLoader | 负责加载配置 | config/allconfig/load.go131-587 |
LoadConfig | 配置加载的主要入口点 | config/allconfig/load.go43-97 |
Hugo 的配置系统通过多种文件格式、分层组织和来自各种来源的覆盖,提供了配置站点的灵活而强大的方式。理解这个系统有助于您有效地组织站点配置,尤其对于拥有多种语言或环境的复杂站点。
该配置系统旨在提供合理的默认值,同时允许对站点生成的所有方面进行精细控制,从而能够适应各种用例。