目錄結構
每個 Hugo 項目都是一個目錄,包含貢獻於網站內容、結構、行為和展示的多個子目錄。
站點骨架
創建新站點時,Hugo 會生成項目骨架。例如,此命令:
hugo new site my-site創建此目錄結構:
my-site/
├── archetypes/
│ └── default.md
├── assets/
├── content/
├── data/
├── i18n/
├── layouts/
├── static/
├── themes/
└── hugo.toml <-- 站點配置根據需求,您可能希望將站點配置組織到子目錄中:
my-site/
├── archetypes/
│ └── default.md
├── assets/
├── config/ <-- 站點配置
│ └── _default/
│ └── hugo.toml
├── content/
├── data/
├── i18n/
├── layouts/
├── static/
└── themes/構建站點時,Hugo 會創建 public 目錄,通常還會創建 resources 目錄:
my-site/
├── archetypes/
│ └── default.md
├── assets/
├── config/
│ └── _default/
│ └── hugo.toml
├── content/
├── data/
├── i18n/
├── layouts/
├── public/ <-- 構建站點時創建
├── resources/ <-- 構建站點時創建
├── static/
└── themes/目錄說明
每個子目錄都對網站的內容、結構、行為或展示有所貢獻。
- archetypes
archetypes目錄包含新內容的模板。詳見 archetypes。- assets
assets目錄包含全局資源,通常通過資源管道處理。這包括圖片、CSS、Sass、JavaScript 和 TypeScript 等資源。詳見 Hugo Pipes。- config
config目錄包含站點配置,可能分為多個子目錄和文件。對於配置簡單或不需要在不同環境中表現不同的項目,在項目根目錄中使用單個配置文件hugo.toml就足夠了。詳見 配置目錄。- content
content目錄包含構成網站內容的標記文件(通常是 Markdown)和頁面資源。詳見 內容組織。- data
data目錄包含數據文件(JSON、TOML、YAML 或 XML),用於增強內容、配置、本地化和導航。詳見 數據源。- i18n
i18n目錄包含多語言站點的翻譯表。詳見 多語言。- layouts
layouts目錄包含將內容、數據和資源轉換為完整網站的模板。詳見 模板。- public
public目錄包含運行hugo或hugo server命令時生成的已發布網站。詳見 構建站點。- resources
resources目錄包含 Hugo 資源管道的緩存輸出,在運行hugo或hugo server命令時生成。默認情況下,此緩存目錄包括 CSS 和圖片。Hugo 會根據需要重新創建此目錄及其內容。- static
static目錄包含構建站點時將復制到public目錄的文件。例如:favicon.ico、robots.txt和驗證網站所有權的文件。在引入 頁面捆綁 和 資源管道 之前,static目錄也用於存放圖片、CSS 和 JavaScript 文件。- themes
themes目錄包含一個或多個 主題,每個主題都有自己的子目錄。
聯合文件系統
Hugo 創建聯合文件系統,允許您將兩個或多個目錄掛載到同一位置。例如,假設您的主目錄在一個目錄中包含 Hugo 項目,在另一個目錄中包含共享內容:
home/
└── user/
├── my-site/
│ ├── content/
│ │ ├── books/
│ │ │ ├── _index.md
│ │ │ ├── book-1.md
│ │ │ └── book-2.md
│ │ └── _index.md
│ ├── themes/
│ │ └── my-theme/
│ └── hugo.toml
└── shared-content/
└── films/
├── _index.md
├── film-1.md
└── film-2.md您可以使用掛載在構建站點時包含共享內容。在站點配置中:
module:
mounts:
- source: content
target: content
- source: /home/user/shared-content
target: content
[module]
[[module.mounts]]
source = 'content'
target = 'content'
[[module.mounts]]
source = '/home/user/shared-content'
target = 'content'
{
"module": {
"mounts": [
{
"source": "content",
"target": "content"
},
{
"source": "/home/user/shared-content",
"target": "content"
}
]
}
}
當一個目錄疊加在另一個目錄之上時,您必須掛載這兩個目錄。
Hugo 不遵循符號鏈接。如果您需要符號鏈接提供的功能,請改用 Hugo 的聯合文件系統。
掛載後,聯合文件系統具有此結構:
home/
└── user/
└── my-site/
├── content/
│ ├── books/
│ │ ├── _index.md
│ │ ├── book-1.md
│ │ └── book-2.md
│ ├── films/
│ │ ├── _index.md
│ │ ├── film-1.md
│ │ └── film-2.md
│ └── _index.md
├── themes/
│ └── my-theme/
└── hugo.toml當兩個或多個文件具有相同路徑時,優先順序遵循掛載順序。例如,如果共享內容目錄包含 books/book-1.md,它將被忽略,因為項目的 content 目錄首先被掛載。
您可以將目錄掛載到 archetypes、assets、content、data、i18n、layouts 和 static。詳見 掛載。
您還可以使用 Hugo Modules 從 Git 倉庫掛載目錄。詳見 Hugo Modules。
主題骨架
創建新主題時,Hugo 會生成一個功能齊全的主題骨架。例如,此命令:
hugo new theme my-theme創建此目錄結構(未顯示子目錄):
my-theme/
├── archetypes/
├── assets/
├── content/
├── data/
├── i18n/
├── layouts/
├── static/
└── hugo.toml使用上述聯合文件系統,Hugo 將這些目錄中的每一個掛載到項目中的相應位置。當兩個文件具有相同路徑時,項目目錄中的文件優先。這允許您通過將副本放在項目目錄中的相同位置來覆蓋主題的模板。
如果您同時使用兩個或多個主題或模塊的組件,並且發生路徑沖突,則第一個掛載優先。