配置文件
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+):
| 旧配置项 | 新配置项 | 说明 |
|---|---|---|
languageCode | locale | 语言区域代码 |
languageName | label | 语言显示名称 |
languageDirection | direction | 文字方向 |
模板方法变更:
| 旧方法 | 新方法 |
|---|---|
.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天)
缓存优化建议
- 将资源缓存纳入版本控制:将
resources/_gen目录提交到 Git,可以加速 CI/CD 构建 - 合理设置远程数据缓存时间:根据数据更新频率设置
maxAge - 清理缓存:使用
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 逻辑
可用的过滤字段
| 字段 | 类型 | 说明 |
|---|---|---|
kind | string | 页面类型的 glob 模式,如 {home,term,taxonomy} |
lang | string | 语言代码的 glob 模式,如 en、zh*(v0.153.0+) |
output | string | 输出格式的 glob 模式,如 {html,json} |
path | string | 页面逻辑路径的 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 配置的核心知识:
- 支持多种配置格式,推荐使用 TOML
- 核心配置包括站点信息、URL、多语言等
- 内容配置控制分类法、标记解析等
- 参数配置用于自定义站点属性
- 可以按环境拆分配置文件
下一章将学习主题开发,掌握如何创建自定义主题。