HUGO MODULES

Theme components

自 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-shortcodesbase-theme,最後是 hyde

Hugo 根據檔案類型,使用兩種不同的算法合併檔案系統:

  • 對於 i18ndata 檔案,Hugo 以翻譯 ID 和檔案內的資料鍵為基準進行深層合併。
  • 對於 staticlayouts(模板)和 archetypes 檔案,則在檔案層級進行合併,因此最左邊的檔案將被選用。

在上述 theme 定義中使用的名稱必須與 /your-site/themes 資料夾中的某個子資料夾名稱相符,例如 /your-site/themes/my-shortcodes。未來計畫會改進此機制,透過 URL 的方式自動解析。

此外,作為主題一部分的元件可以擁有自己的配置檔案,例如 hugo.toml。目前主題元件能配置的項目有以下限制:

  • params(全域及語言別)
  • menu(全域及語言別)
  • outputformatsmediatypes

相同的規則在此適用:優先採用最左側具有相同 ID 的參數或選單等。上述的部分還有一些隱藏的實驗性命名空間支援,我們將在未來進一步改進。但建議主題作者建立自己的命名空間以避免命名衝突。


  1. 對於在 Hugo Themes Showcase 上託管的主題,元件需要作為指向 exampleSite/themes 資料夾的 git 子模組新增。 ↩︎