主题组件
自从 Hugo 0.42
版本起,一个项目可以将一个主题配置为由任意数量的主题组件组成的项目:
hugo.
theme:
- my-shortcodes
- base-theme
- hyde
theme = ['my-shortcodes', 'base-theme', 'hyde']
{
"theme": [
"my-shortcodes",
"base-theme",
"hyde"
]
}
你甚至可以将这些嵌套,让主题组件自身在它自己的 hugo.toml
中包含主题组件(主题继承)1。
上面 hugo.toml
中的主题定义示例创建了一个由 3 个主题组件组成的主题,从左到右的优先级递增。
对于给定的文件、数据条目等,Hugo 首先会查找项目中的内容,然后是 my-shortcodes
、base-theme
、最后是 hyde
。
Hugo 使用两种不同的算法来合并文件系统,具体取决于文件类型:
- 对于
i18n
和data
文件,Hugo 使用文件中的翻译 ID 和数据键进行深度合并。 - 对于
static
、layouts
(模板)和archetypes
文件,它们是基于文件级别进行合并的。因此,将选择最左边的文件。
上面的 theme
定义中使用的名称必须与 /your-site/themes
中的文件夹名称匹配,例如 /your-site/themes/my-shortcodes
。我们计划对此进行改进,并获得一个 URL 方案,以便可以自动解析这些名称。
此外,请注意,作为主题一部分的组件可以有自己的配置文件,例如 hugo.toml
。当前有一些限制可以配置主题组件:
params
(全局和每个语言)menu
(全局和每个语言)outputformats
和mediatypes
。
这里也适用相同的规则:具有相同 ID 的最左侧的参数/菜单等将获胜。上述内容中还有一些隐藏和实验性的命名空间支持,我们将致力于在将来改进,但鼓励主题作者创建自己的命名空间以避免命名冲突。
-
对于在 Hugo Themes Showcase 上托管的主题,组件需要作为指向
exampleSite/themes
目录的 Git 子模块添加。 ↩︎