在 Hugo 的最新版本中,配置文件的组织方式变得更加灵活,支持多环境配置和模块化配置。config/_default/hugo.toml 和项目根目录下的 hugo.toml 之间的关系如下:


1. 配置文件的位置与优先级

Hugo 支持多种配置文件格式(TOML、YAML、JSON),并且可以通过目录结构来组织配置文件。以下是两种配置文件的定位和优先级:

  • 项目根目录下的 hugo.toml
    这是 Hugo 的传统配置文件位置,适用于简单的项目或旧版本 Hugo。它的优先级较低,如果存在 config 目录,Hugo 会优先读取 config 目录中的配置。

  • config/_default/hugo.toml
    这是 Hugo 推荐的新配置方式,位于 config 目录下的 _default 子目录中。_default 目录中的配置文件是默认配置,适用于所有环境(如开发环境、生产环境等)。Hugo 会优先读取 config 目录中的配置,且 _default 目录的配置会被其他环境配置(如 productiondevelopment)覆盖或扩展。


2. 多环境配置

Hugo 支持多环境配置,允许为不同的环境(如开发、生产、测试等)定义不同的配置。config 目录的结构如下:

1
2
3
4
5
6
7
8
9
10
11
config/
├── _default/
│ ├── hugo.toml # 默认配置,适用于所有环境
│ ├── params.toml # 默认参数配置
│ └── menus.toml # 默认菜单配置
├── production/
│ ├── hugo.toml # 生产环境配置
│ └── params.toml # 生产环境参数配置
└── development/
├── hugo.toml # 开发环境配置
└── params.toml # 开发环境参数配置
  • _default/hugo.toml:这是基础配置,适用于所有环境。
  • production/hugo.tomldevelopment/hugo.toml:这些是特定环境的配置,会覆盖或扩展 _default 中的配置。

3. 配置文件的合并规则

Hugo 在加载配置时,会按照以下规则合并配置文件:

  1. 默认配置:首先加载 config/_default/hugo.toml 中的配置。
  2. 环境配置:根据当前环境(通过 --environment 参数指定),加载对应环境的配置文件(如 production/hugo.toml)。
  3. 覆盖规则:环境配置中的同名配置项会覆盖 _default 中的配置项。

例如,如果 _default/hugo.toml 中设置了 baseURL = "http://example.com/",而在 production/hugo.toml 中设置了 baseURL = "https://example.com/",则生产环境会使用后者。


4. 何时使用根目录的 hugo.toml

在以下情况下,可以使用根目录的 hugo.toml

  • 项目较简单,不需要多环境配置。
  • 项目是从旧版本 Hugo 迁移而来,尚未切换到 config 目录结构。

但为了更好的可维护性和灵活性,建议使用 config 目录结构,并将配置文件放在 _default 或其他环境目录中。


5. 总结

  • config/_default/hugo.toml 是默认配置文件,适用于所有环境,优先级高于根目录的 hugo.toml
  • 根目录的 hugo.toml 是旧版配置方式,适用于简单项目或旧版本迁移。
  • 多环境配置:通过 config 目录结构,可以为不同环境定义不同的配置,Hugo 会自动合并和覆盖配置项。

如果需要更详细的配置示例或高级用法,可以参考 Hugo 官方文档