跳到主要内容

配置文件

Hugo 的配置文件控制着站点的各种行为。本章将详细介绍配置选项和最佳实践。

配置文件格式

Hugo 支持三种配置格式:TOML、YAML 和 JSON。推荐使用 TOML 格式。

TOML 格式(推荐)

hugo.toml

baseURL = 'https://example.org/'
languageCode = 'zh-cn'
title = '我的博客'
theme = 'ananke'

[params]
description = "一个技术博客"
author = "张三"

[menu]
[[menu.main]]
name = "首页"
url = "/"
weight = 1

YAML 格式

hugo.yaml

baseURL: https://example.org/
languageCode: zh-cn
title: 我的博客
theme: ananke

params:
description: 一个技术博客
author: 张三

menu:
main:
- name: 首页
url: /
weight: 1

JSON 格式

config.json

{
"baseURL": "https://example.org/",
"languageCode": "zh-cn",
"title": "我的博客",
"theme": "ananke",
"params": {
"description": "一个技术博客",
"author": "张三"
}
}

核心配置

站点基本信息

baseURL = 'https://example.org/'
languageCode = 'zh-cn'
title = '我的博客'
theme = 'ananke'

# 构建配置
buildDrafts = false # 是否构建草稿
buildFuture = false # 是否构建未来日期的内容
buildExpired = false # 是否构建过期内容

# 分页配置
[pagination]
pagerSize = 10

# 摘要长度
summaryLength = 70

# 是否渲染 emoji
enableEmoji = true

# 是否使用相对 URL
relativeURLs = false

# 启用 robots.txt
enableRobotsTXT = true

# 版权信息
copyright = '© 2024 我的博客. 保留所有权利。'

# 时区配置
timeZone = 'Asia/Shanghai'

# 构建超时(防止无限递归)
timeout = '60s'

# CJK 语言检测(影响字数统计)
hasCJKLanguage = true

调试配置

# 标题大小写风格
# ap: 美联社风格(默认)
# chicago: 芝加哥风格
# go: 每个单词首字母大写
# firstupper: 仅首字母大写
# none: 不转换
titleCaseStyle = 'ap'

# 列表标题是否大写
capitalizeListTitles = true

# 列表标题是否复数化
pluralizeListTitles = true

# 清理目标目录(删除不在静态目录中的文件)
cleanDestinationDir = false

# 模板执行指标(调试用)
templateMetrics = false
templateMetricsHints = false

# 警告级别
panicOnWarning = false

# 打印各种警告
printI18nWarnings = false # 缺失翻译警告
printPathWarnings = false # 路径冲突警告
printUnusedTemplates = false # 未使用模板警告

# 忽略特定日志消息
ignoreLogs = ['warning-id-1', 'warning-id-2']

# 忽略特定文件
ignoreFiles = ['\.bak$', 'README\.md']

# 禁用实时重载
disableLiveReload = false

# 禁用别名重定向
disableAliases = false

引用链接配置

# ref/relref 找不到页面时的错误级别
refLinksErrorLevel = 'ERROR' # ERROR 或 WARNING

# ref/relref 找不到页面时返回的 URL
refLinksNotFoundURL = '/404/'

服务器配置

开发服务器相关配置:

[server]
# 监听地址
host = 'localhost'

# 端口
port = 1313

# 实时重载端口
liveReloadPort = 0

# 是否禁用实时重载
disableLiveReload = false

# 响应头配置
[[server.headers]]
for = '/**'
[server.headers.values]
X-Frame-Options = 'DENY'
X-Content-Type-Options = 'nosniff'

# 重定向配置(用于开发环境)
[[server.redirects]]
from = '/old/**'
to = '/new/'
status = 301

URL 配置

baseURL = 'https://example.org/'

# URL 格式配置
[permalinks]
posts = '/:year/:month/:title/'

# 可用的占位符:
# :year - 年份 (2024)
# :month - 月份 (01)
# :monthname - 月份名称 (January)
# :day - 日期 (15)
# :weekday - 星期几 (1)
# :weekdayname - 星期名称 (Monday)
# :yearday - 年中第几天 (015)
# :section - 分区名 (posts)
# :sections - 所有分区 (posts/tech)
# :title - 文章标题
# :slug - 自定义 slug
# :filename - 文件名

多语言配置

Hugo v0.158.0 引入了新的语言配置方式,使用更标准的 locale 设置:

defaultContentLanguage = 'zh'
defaultContentLanguageInSubdir = false

[languages]
[languages.zh]
title = '我的博客'
locale = 'zh-CN' # 替代旧的 languageCode
label = '中文' # 替代旧的 languageName
direction = 'ltr' # 文字方向:ltr(从左到右)或 rtl(从右到左)
weight = 1
contentDir = 'content/zh'

[languages.en]
title = 'My Blog'
locale = 'en-US'
label = 'English'
direction = 'ltr'
weight = 2
contentDir = 'content/en'

[languages.en.params]
description = 'A tech blog'

配置项变更说明(Hugo v0.158.0+):

旧配置项新配置项说明
languageCodelocale语言区域代码
languageNamelabel语言显示名称
languageDirectiondirection文字方向

模板方法变更

旧方法新方法
.Site.LanguageCode.Site.Language.Locale
.Language.LanguageCode.Language.Locale
.Language.LanguageName.Language.Label
.Language.LanguageDirection.Language.Direction

旧配置和方法仍然可用,但会在未来的版本中移除。建议新项目使用新的配置方式。

内容配置

分类法配置

[taxonomies]
tag = 'tags'
category = 'categories'
author = 'authors'
series = 'series'

# 禁用默认分类法
# disableKinds = ['taxonomy', 'term']

标记配置

[markup]
defaultMarkdownHandler = 'goldmark'

[markup.goldmark]
[markup.goldmark.extensions]
definitionList = true
footnote = true
linkify = true
strikethrough = true
table = true
taskList = true
typographer = true

[markup.goldmark.renderer]
unsafe = true # 允许 HTML 标签

[markup.highlight]
codeFences = true
guessSyntax = true
lineNos = true
lineNumbersInTable = true
noClasses = false
style = 'monokai'

[markup.tableOfContents]
startLevel = 2
endLevel = 4
ordered = false

输出格式配置

[outputs]
home = ['HTML', 'RSS', 'JSON']
section = ['HTML', 'RSS']
taxonomy = ['HTML', 'RSS']
term = ['HTML', 'RSS']

# 自定义输出格式
[outputFormats]
[outputFormats.JSON]
mediaType = 'application/json'
baseName = 'index'
isPlainText = true

菜单配置

简单配置

[menu]
[[menu.main]]
name = '首页'
url = '/'
weight = 1

[[menu.main]]
name = '博客'
url = '/posts/'
weight = 2

[[menu.main]]
name = '关于'
url = '/about/'
weight = 3

详细配置

[menu]
[[menu.main]]
identifier = 'posts'
name = '博客文章'
url = '/posts/'
weight = 1
pre = '<i class="icon-post"></i>'
post = ''

[[menu.main]]
identifier = 'tutorials'
name = '教程'
url = '/tutorials/'
weight = 2
parent = 'posts' # 子菜单

[[menu.footer]]
name = '隐私政策'
url = '/privacy/'
weight = 1

参数配置

站点参数

[params]
description = '一个技术博客'
author = '张三'
email = '[email protected]'

# 社交链接
github = 'https://github.com/zhangsan'
twitter = 'https://twitter.com/zhangsan'
linkedin = 'https://linkedin.com/in/zhangsan'

# SEO 配置
keywords = ['技术', '编程', '博客']

# 主题特定配置
mainSections = ['posts']
featuredImageField = 'image'

# 评论系统
[params.comments]
enable = true
provider = 'disqus'
disqusShortname = 'my-blog'

# 分析配置
[params.analytics]
enable = true
googleAnalytics = 'G-XXXXXXXXXX'

# 图片配置
[params.image]
width = 800
height = 600
quality = 85

环境特定配置

Hugo 支持根据环境加载不同的配置:

config/
├── _default/
│ ├── config.toml
│ ├── params.toml
│ └── menus.toml
├── development/
│ └── config.toml
└── production/
└── config.toml

开发环境配置 config/development/config.toml

baseURL = 'http://localhost:1313/'
buildDrafts = true

生产环境配置 config/production/config.toml

baseURL = 'https://example.org/'
buildDrafts = false
minify = true

模块配置

Hugo Modules 是管理主题和依赖的现代方式。

[module]
[module.hugoVersion]
extended = true
min = '0.100.0'
max = ''

[[module.imports]]
path = 'github.com/theNewDynamic/gohugo-theme-ananke'
disable = false

[[module.imports]]
path = 'github.com/example/my-theme'

[[module.imports.mounts]]
source = 'static'
target = 'static'

挂载点配置

[module]
[[module.mounts]]
source = 'content'
target = 'content'

[[module.mounts]]
source = 'static'
target = 'static'

[[module.mounts]]
source = 'layouts'
target = 'layouts'

[[module.mounts]]
source = 'assets'
target = 'assets'

[[module.mounts]]
source = 'content/en'
target = 'content'
lang = 'en'

安全模型

Hugo 的安全模型基于一个核心原则:模板和配置作者是可信的,但内容作者是不可信的。这个模型确保生成的 HTML 输出能够防止代码注入攻击。

运行时安全

Hugo 生成的是静态网站,最终输出直接在浏览器中运行。但在构建过程中,hugo 可执行文件本身是运行时环境。Hugo 通过沙箱机制和严格的默认安全策略来保护构建过程:

虚拟文件系统

Hugo 使用虚拟文件系统,限制文件访问范围。只有主项目可以访问项目根目录之外的文件或目录,外部组件无法访问。

只读访问

用户定义的组件对文件系统只有只读访问权限,防止意外修改。

受控的外部二进制

Hugo 使用外部二进制文件来支持某些功能(如 Asciidoctor),但这些是严格预定义的,具有特定的标志,并且默认禁用。

禁止任意命令

Hugo 故意不实现允许用户执行任意操作系统命令的通用函数,以降低安全风险。

依赖安全

Hugo 使用 Go Modules 管理依赖,编译为静态二进制文件。Go Modules 会创建 go.sum 文件,这是一个关键的安全特性。

go.sum 文件充当数据库,存储所有依赖项的预期加密校验和,包括间接依赖(传递依赖)。Hugo Modules 也生成 go.sum 文件。

最佳实践:将 go.sum 文件提交到版本控制系统中。如果 Hugo 在构建过程中检测到校验和不匹配,将会失败,表明可能有人试图篡改项目的依赖项。

Web 应用安全

Hugo 的安全理念主要与 OWASP 定义的威胁保持一致。对于 HTML 输出,Hugo 在清晰的信任模型下运行:

  • 模板和配置作者(开发者)被视为可信的
  • 提供给模板的数据被视为不可信的

Safe 函数

为了防止意外转义开发者知道是安全的数据,Hugo 提供了 safe 函数:

{{ $html | safeHTML }}
{{ $css | safeCSS }}
{{ $js | safeJS }}
{{ $url | safeURL }}

这些函数允许开发者显式将数据标记为可信,绕过默认的转义机制。但使用时需要谨慎,确保数据来源可靠。

内联短代码例外

启用内联短代码(inline shortcodes)功能时,你隐式信任短代码中的逻辑和内容文件中包含的数据。

静态站点生成器优势

作为静态站点生成器,Hugo 通过消除与动态用户输入相关的复杂性和漏洞,显著减少了攻击面。与动态网站不同,Hugo 生成静态 HTML 文件,最大限度地降低了实时攻击的风险。

Markdown 安全

Hugo 的默认 Markdown 渲染器配置为清理潜在的不安全内容。这个默认行为确保删除或转义潜在的恶意代码或脚本。如果对内容源的安全性有高度信心,可以重新配置此设置。

安全配置

Hugo 的安全配置允许你控制各种安全相关的设置:

[security]
# 控制哪些环境变量可以被访问
[security.funcs]
getenv = ['^HUGO_', '^CI$']

# 控制 HTTP 请求
[security.http]
methods = ['(?i)GET|POST']
urls = ['.*']

# 控制可执行文件的执行
[security.exec]
allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$']
osEnv = ['(?i)^(PATH|PATHEXT|APPDATA|TMP|TEMP|TERM)$']

# 控制全局函数的访问权限
[security.global]
disable = false

# 控制模板函数的访问权限
[security.templates]
disable = false

环境变量访问控制

默认情况下,模板只能访问以 HUGO_ 开头或名为 CI 的环境变量:

[security.funcs]
getenv = ['^HUGO_', '^CI$', '^MY_APP_']

HTTP 请求控制

控制模板可以发起的 HTTP 请求:

[security.http]
methods = ['(?i)GET|POST']
urls = ['^https://api\\.example\\.com/.*$']

可执行文件控制

控制允许执行的外部程序:

[security.exec]
allow = ['^go$', '^git$', '^npm$']

隐私配置

Hugo 提供隐私配置来帮助网站作者遵守地区隐私法规,包括但不限于:

  • GDPR(通用数据保护条例):适用于欧盟和欧洲经济区内的个人
  • CCPA(加州消费者隐私法案):适用于加州居民
  • CPRA(加州隐私权法案):在 CCPA 基础上提供更强的消费者隐私保护
  • CDPA(弗吉尼亚消费者数据保护法案):适用于收集、处理或出售弗吉尼亚州居民个人数据的企业

隐私配置选项

这些设置影响 Hugo 内置模板的行为。第三方模块或主题提供的模板可能不受这些设置影响。

[privacy]
[privacy.disqus]
disable = false

[privacy.googleAnalytics]
disable = false
respectDoNotTrack = true

[privacy.instagram]
disable = false
simple = false

[privacy.vimeo]
disable = false
enableDNT = false
simple = false

[privacy.x]
disable = false
enableDNT = false
simple = false

[privacy.youTube]
disable = false
privacyEnhanced = false

Disqus 配置

[privacy.disqus]
disable = false # 禁用 Disqus 嵌入

Google Analytics 配置

[privacy.googleAnalytics]
disable = false # 禁用 Google Analytics
respectDoNotTrack = true # 尊重浏览器的 Do Not Track 设置

Instagram 配置

[privacy.instagram]
disable = false # 禁用 Instagram 嵌入
simple = false # 使用简单的图片嵌入而非 iframe

simple = true 时,Instagram 短代码会显示一个简单的图片而不是 iframe 嵌入,这样可以减少跟踪。

Vimeo 配置

[privacy.vimeo]
disable = false # 禁用 Vimeo 嵌入
enableDNT = true # 启用 Do Not Track
simple = false # 使用简单的图片嵌入

X/Twitter 配置

[privacy.x]
disable = false # 禁用 X/Twitter 嵌入
enableDNT = true # 启用 Do Not Track
simple = false # 使用简单的图片嵌入

YouTube 配置

[privacy.youTube]
disable = false # 禁用 YouTube 嵌入
privacyEnhanced = true # 使用隐私增强模式

privacyEnhanced = true 时,YouTube 视频会使用 youtube-nocookie.com 域名,减少 cookie 跟踪。

隐私最佳实践

完全禁用第三方服务

如果不需要第三方嵌入服务,可以完全禁用:

[privacy]
[privacy.disqus]
disable = true
[privacy.googleAnalytics]
disable = true
[privacy.instagram]
disable = true
[privacy.vimeo]
disable = true
[privacy.x]
disable = true
[privacy.youTube]
disable = true

启用隐私增强选项

对于需要使用的服务,启用隐私增强选项:

[privacy]
[privacy.googleAnalytics]
respectDoNotTrack = true
[privacy.instagram]
simple = true
[privacy.vimeo]
enableDNT = true
[privacy.x]
enableDNT = true
[privacy.youTube]
privacyEnhanced = true

性能配置

并行构建

启用 Git 信息可以获取每篇文章的最后修改时间:

enableGitInfo = true

缓存配置

Hugo 的缓存系统可以显著提高构建性能,特别是对于需要处理大量资源的项目。

缓存目录占位符

Hugo 使用占位符来定义缓存目录:

占位符说明
:cacheDir操作系统特定的缓存目录
:project项目哈希值
:resourceDir资源目录路径

默认缓存目录位置:

  • Linux/Unix: $HOME/.cache/hugo_cache/
  • macOS: $HOME/Library/Caches/hugo_cache/
  • Windows: %LOCALAPPDATA%\hugo_cache\

完整缓存配置

[caches]
# 资产缓存(CSS、JS 等)
[caches.assets]
dir = ':resourceDir/_gen'
maxAge = -1 # 永不过期

# 图片处理缓存
[caches.images]
dir = ':resourceDir/_gen'
maxAge = -1

# CSV 数据缓存
[caches.getcsv]
dir = ':cacheDir/:project'
maxAge = '12h' # 12小时后过期

# JSON 数据缓存
[caches.getjson]
dir = ':cacheDir/:project'
maxAge = '12h'

# Hugo 模块缓存
[caches.modules]
dir = ':cacheDir/modules'
maxAge = -1

maxAge 参数说明

maxAge 控制缓存的过期时间:

  • -1:永不过期
  • 0:每次构建都重新获取
  • 正整数:过期时间,格式如 12h(12小时)、24h(24小时)、168h(7天)

缓存优化建议

  1. 将资源缓存纳入版本控制:将 resources/_gen 目录提交到 Git,可以加速 CI/CD 构建
  2. 合理设置远程数据缓存时间:根据数据更新频率设置 maxAge
  3. 清理缓存:使用 hugo --gc 清理未使用的资源

模板缓存

使用 partialCached 函数可以缓存 partial 模板的渲染结果:

<!-- 基本用法 -->
{{ partialCached "footer.html" . }}

<!-- 带变体键 -->
{{ partialCached "header.html" . .Section }}

当使用变体键时,不同的键值会生成不同的缓存版本。这在多语言站点或需要根据上下文变化的 partial 中特别有用:

<!-- 根据语言缓存不同的导航 -->
{{ partialCached "nav.html" . .Lang }}

<!-- 根据分区缓存不同的侧边栏 -->
{{ partialCached "sidebar.html" . .Section }}

分段构建(Segmentation)

分段构建允许你将站点分成多个段,分别构建不同部分,减少构建时间。这对于包含大量页面的大型站点特别有用。

工作原理

分段构建通过 include 和 exclude 过滤器来定义每个段包含哪些内容。需要注意的是,分段构建只影响渲染输出,Hugo 仍然可以访问完整的站点对象(所有页面和内容元数据),只是在渲染时只处理指定段的内容。

使用场景

  • 频繁更新特定部分:例如每小时构建首页和新闻部分,每周完整构建一次整站
  • CI/CD 优化:根据 Git diff 只构建变更的部分,减少构建时间和资源消耗
  • 开发效率提升:开发时只构建正在工作的部分,加快预览速度
  • 定向输出:只生成特定输出格式(如 JSON 搜索索引)

段定义规则

每个段通过 include 和 exclude 过滤器定义:

  • 过滤器:每个段可以包含零个或多个 exclude 过滤器和零个或多个 include 过滤器
  • 匹配器:每个过滤器包含一个或多个字段 glob 模式匹配器
  • 逻辑:同一过滤器内的匹配器使用 AND 逻辑,同一类型(include 或 exclude)的多个过滤器使用 OR 逻辑

可用的过滤字段

字段类型说明
kindstring页面类型的 glob 模式,如 {home,term,taxonomy}
langstring语言代码的 glob 模式,如 enzh*(v0.153.0+)
outputstring输出格式的 glob 模式,如 {html,json}
pathstring页面逻辑路径的 glob 模式,如 {/docs,/docs/**}

配置示例

TOML 格式:

[segments]
[segments.home_and_news]
# 排除特定语言和输出格式
[[segments.home_and_news.excludes]]
lang = 'n*' # 排除所有以 n 开头的语言

[[segments.home_and_news.excludes]]
lang = 'en'
output = 'rss' # 排除英文 RSS 输出

# 包含首页和特定路径
[[segments.home_and_news.includes]]
kind = '{home,term,taxonomy}' # 包含首页、标签页、分类页

[[segments.home_and_news.includes]]
path = '{/news,/news/**}' # 包含 /news 路径下的所有页面

[segments.docs_only]
[[segments.docs_only.includes]]
path = '{/docs,/docs/**}'

YAML 格式:

segments:
home_and_news:
excludes:
- lang: 'n*'
- lang: 'en'
output: 'rss'
includes:
- kind: '{home,term,taxonomy}'
- path: '{/docs,/docs/**}'

docs_only:
includes:
- path: '{/docs,/docs/**}'

命令行使用

通过 --renderSegments 参数指定要渲染的段:

# 只渲染 home_and_news 段
hugo --renderSegments home_and_news

# 渲染多个段(用逗号分隔)
hugo --renderSegments home_and_news,docs_only

# 渲染所有内容(默认行为)
hugo

# 或显式指定空列表
hugo --renderSegments []

在模板中检测当前段

可以使用 hugo.Config.Segments 检测当前正在渲染的段:

{{ if in hugo.Config.Segments "home_and_news" }}
<!-- 仅在 home_and_news 段中显示 -->
<p>这是首页和新闻段的内容</p>
{{ end }}

{{/* 检查是否在开发模式 */}}
{{ if hugo.IsServer }}
{{/* 开发服务器可以渲染所有段 */}}
{{ end }}

最佳实践

将宽泛的排除规则放在 excludes 部分,比如排除特定语言或输出格式:

[segments]
[segments.production_fast]
# 排除不需要频繁重建的内容
[[segments.production_fast.excludes]]
output = 'json' # 排除 JSON 输出

[[segments.production_fast.excludes]]
path = '{/archive,/archive/**}' # 排除归档内容

# 包含核心内容
[[segments.production_fast.includes]]
kind = 'home'

[[segments.production_fast.includes]]
path = '{/blog,/blog/**}'

与开发服务器配合

分段构建同样适用于 hugo server

# 开发时只渲染特定段
hugo server --renderSegments docs_only

这在大型站点开发时特别有用,可以显著减少内存占用和加快热重载速度

增量构建

Hugo 在开发模式下(hugo server)自动使用增量构建:

  • 修改单个内容文件,只重新渲染该页面
  • 修改模板,重新渲染受影响的所有页面
  • 修改配置,完全重新构建

强制完全重建:

hugo server --disableFastRender

相关内容配置

[related]
includeNewer = true
threshold = 80
toLower = false

[[related.indices]]
name = 'tags'
weight = 100

[[related.indices]]
name = 'categories'
weight = 80

[[related.indices]]
name = 'date'
weight = 10

分页配置

[pagination]
pagerSize = 10
path = 'page'

Sitemap 配置

[sitemap]
changefreq = 'weekly'
filename = 'sitemap.xml'
priority = 0.5

RSS 配置

[outputs]
home = ['HTML', 'RSS']

[outputFormats.RSS]
baseName = 'feed'
mediaType = 'application/rss+xml'

完整配置示例

baseURL = 'https://example.org/'
languageCode = 'zh-cn'
title = '我的技术博客'
theme = 'ananke'

buildDrafts = false
buildFuture = false
enableEmoji = true
enableRobotsTXT = true
summaryLength = 70

[pagination]
pagerSize = 10

[permalinks]
posts = '/:year/:month/:title/'

[taxonomies]
tag = 'tags'
category = 'categories'
author = 'authors'

[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
[markup.highlight]
codeFences = true
guessSyntax = true
lineNos = true
style = 'monokai'
[markup.tableOfContents]
startLevel = 2
endLevel = 4

[menu]
[[menu.main]]
name = '首页'
url = '/'
weight = 1
[[menu.main]]
name = '博客'
url = '/posts/'
weight = 2
[[menu.main]]
name = '关于'
url = '/about/'
weight = 3

[params]
description = '分享技术心得和编程经验'
author = '张三'
email = '[email protected]'
github = 'https://github.com/zhangsan'

[params.comments]
enable = true
provider = 'giscus'

[params.analytics]
enable = true
googleAnalytics = 'G-XXXXXXXXXX'

[outputs]
home = ['HTML', 'RSS', 'JSON']
section = ['HTML', 'RSS']

[sitemap]
changefreq = 'weekly'
priority = 0.5

[related]
includeNewer = true
threshold = 80

[[related.indices]]
name = 'tags'
weight = 100
[[related.indices]]
name = 'categories'
weight = 80

配置文件拆分

对于大型项目,可以将配置拆分为多个文件:

config/
└── _default/
├── config.toml # 主配置
├── params.toml # 参数配置
├── menus.toml # 菜单配置
├── markup.toml # 标记配置
└── languages.toml # 语言配置

config/_default/config.toml

baseURL = 'https://example.org/'
languageCode = 'zh-cn'
title = '我的博客'
theme = 'ananke'

config/_default/params.toml

description = '一个技术博客'
author = '张三'

[comments]
enable = true
provider = 'giscus'

config/_default/menus.toml

[[main]]
name = '首页'
url = '/'
weight = 1

[[main]]
name = '博客'
url = '/posts/'
weight = 2

小结

本章介绍了 Hugo 配置的核心知识:

  1. 支持多种配置格式,推荐使用 TOML
  2. 核心配置包括站点信息、URL、多语言等
  3. 内容配置控制分类法、标记解析等
  4. 参数配置用于自定义站点属性
  5. 可以按环境拆分配置文件

下一章将学习主题开发,掌握如何创建自定义主题。