本文为 Hugo 官方文档中 configuration 部分的翻译,翻译时间为 2023/8/4,此时 Hugo 最新的 Release 版本为 v0.116.1,请注意文档的时效性。
关于配置文件
Hugo 使用 hugo.toml
, hugo.yaml
,或者是 hugo.json
(如果在根目录下被发现的话)作为默认的站点配置文件。
用户可以选择使用命令行选项--config
用一个或多个站点配置文件覆盖该默认值。
例如:
|
|
多个站点配置文件可以作为逗号分隔的字符串指定给
--config
选项。
hugo.toml vs config.toml
在 Hugo 0.110.0 版本中,我们将默认的配置基本文件名更改为hugo
,例如hugo.toml
。我们仍然会查找config.toml
等文件,但我们建议您最终将其重命名(但如果您想支持旧版本的 Hugo,则需要等待)。我们这样做的主要原因是让代码编辑器和构建工具更容易识别它作为 Hugo 配置文件和项目的标识。
配置目录
除了使用单个站点配置文件外,您还可以使用configDir
目录(默认为config/
)来更轻松地组织和管理环境特定的设置。
每个文件代表一个配置的根对象,例如
params.toml
用于[Params]
,menu(s).toml
用于[Menu]
,languages.toml
用于[Languages]
等等…每个文件的内容必须是顶级的,例如:
hugo.yaml
:1 2
Params: foo: bar
params.yaml
:1
foo: bar
每个目录保存了一组文件,其中包含特定于某个环境的设置。
文件可以进行本地化,以便成为特定语言的配置文件。
1 2 3 4 5 6 7 8 9 10 11 12 13
├── config │ ├── _default │ │ ├── hugo.toml │ │ ├── languages.toml │ │ ├── menus.en.toml │ │ ├── menus.zh.toml │ │ └── params.toml │ ├── production │ │ ├── hugo.toml │ │ └── params.toml │ └── staging │ ├── hugo.toml │ └── params.toml
考虑上面的结构,在运行hugo --environment staging
命令时,Hugo 会使用config/_default
目录下的所有设置,并将staging
目录的设置合并在其之上。
我们通过一个例子来更好地理解。假设您正在为您的网站使用 Google Analytics。这需要在hugo.toml
文件中指定googleAnalytics = "G-XXXXXXXX"
。现在考虑以下情况:
- 您不希望在开发环境,即
localhost
中加载 Analytics 代码。 - 您想要为生产和演示环境使用不同的 Google Analytics ID,例如:
- 生产环境使用
G-PPPPPPPP
- 演示环境使用
G-SSSSSSSS
- 生产环境使用
根据上述情况,您需要配置您的hugo.toml
文件如下:
在
_default/hugo.toml
中,您根本不需要提及googleAnalytics
参数。这确保在开发服务器上运行hugo server
时不会加载任何 Google Analytics 代码。这有效是因为,默认情况下,当您运行hugo server
时,Hugo 会将Environment=development
,这将使用_default
文件夹中的配置文件。在
production/hugo.toml
中,您只需要一行:googleAnalytics = "G-PPPPPPPP"
您无需在此配置文件中再次提及所有其他参数,如
title
、baseURL
、theme
等等。您只需要提及与生产环境不同或新的参数。这是因为 Hugo 将把这个配置与_default/hugo.toml
进行合并。现在,当您运行hugo
(构建命令)时,默认情况下 Hugo 会将Environment=production
,因此生产网站中将包含G-PPPPPPPP
的 Analytics 代码。类似地,在
staging/hugo.toml
中,您只需要一行:googleAnalytics = "G-SSSSSSSS"
现在您需要告诉 Hugo 您正在使用演示环境。因此,您的构建命令应为
hugo --environment staging
,这将在您的演示网站中加载G-SSSSSSSS
的Analytics代码。
当使用
hugo server
时,默认环境为development,当使用hugo
命令时,默认环境为production。
合并主题配置
_merge
配置项可以有以下值:
none
不进行合并。
shallow
只添加新键的值。
deep
添加新键的值,并合并现有的值。
请注意,您不需要像下面的默认设置那样冗长;如果未设置,较高层级的_merge
值将被继承。
hugo.yaml
:
|
|
所有的配置项设置
以下是Hugo定义的变量的完整列表。用户可以选择覆盖其站点配置文件中的这些值。
archetypeDir
默认值: “archetypes”
Hugo 查找原型文件(内容模板)的目录。还可以参考模块挂载配置,以另一种方式配置这个目录(从 Hugo 0.56 版本开始)。
assetDir
默认值: “assets”
Hugo 查找用于Hugo Pipes 的资源文件的目录。还可以参考模块挂载配置,以另一种方式配置这个目录(从 Hugo 0.56 版本开始)。
baseURL
您发布的站点的绝对 URL(包括协议、主机、路径和斜杠),例如 https://www.example.org/docs/
。
build
参见配置构建。
buildDrafts (false)
默认值: false
构建时是否包含草稿。
buildExpired
默认值: false
是否包含已过期的内容。
buildFuture
默认值: false
是否包含发布日期在未来的内容。
caches
参见配置文件缓存。
cascade
将默认配置值(前置元数据)传递给内容树中的页面。站点配置中的选项与页面前置元数据中的选项相同,请参阅前置元数据级联。
canonifyURLs
默认值: false
启用后,将相对 URL 转换为绝对 URL。
cleanDestinationDir
默认值: false
构建时,删除目标中在静态目录中找不到的文件。
contentDir
默认值: “content”
Hugo 读取内容文件的目录。还可以参考模块挂载配置,以另一种方式配置这个目录(从 Hugo 0.56 版本开始)。
copyright
默认值: ""
版权声明,通常显示在网站的页脚。
dataDir
默认值: “data”
Hugo 读取数据文件的目录。还可以参考模块挂载配置,以另一种方式配置这个目录(从 Hugo 0.56 版本开始)。
defaultContentLanguage
默认值: “en”
没有语言标识的内容将默认使用此语言。
defaultContentLanguageInSubdir
默认值: false
在子目录中呈现默认内容语言,例如 content/en/
。网站根目录 /
将重定向到 /en/
。
disableAliases
默认值: false
禁用别名重定向的生成。请注意,即使设置了 disableAliases
,别名本身仍将保留在页面中。使用此选项可以在 .htaccess
、Netlify 的 _redirects
文件或类似的情况下生成 301 重定向。
disableHugoGeneratorInject
默认值: false
Hugo 默认情况下会在首页的 HTML 头部插入生成器元标签。您可以关闭它,但我们真的希望您不要这样做,因为这是观察 Hugo 的受欢迎程度的好方法。
disableKinds
默认值: []
启用对指定的 Kinds 的所有页面进行禁用。允许在此列表中使用的值有:“page”、“home”、“section”、“taxonomy”、“term”、“RSS”、“sitemap”、“robotsTXT”、“404”。
disableLiveReload
默认值: false
禁用浏览器窗口的自动实时重新加载。
disablePathToLower
默认值: false
不要将 URL/路径转换为小写。
enableEmoji
默认值: false
为页面内容启用 Emoji 表情符号支持;参见Emoji 表情符号秘笈。
enableGitInfo
默认值: false
为每个页面启用 .GitInfo
对象(如果 Hugo 站点已通过 Git 进行版本控制)。这将使用内容文件的最后一次 git 提交日期更新每个页面的 Lastmod
参数。
enableInlineShortcodes
默认值: false
启用行内短代码支持。参见行内短代码。
enableMissingTranslationPlaceholders
默认值: false
如果翻译缺失,显示一个占位符,而不是默认值或空字符串。
enableRobotsTXT
默认值: false
启用 robots.txt
文件的生成。
frontmatter
参见前置元数据配置。
googleAnalytics
默认值: ""
Google Analytics 跟踪 ID。
hasCJKLanguage
默认值: false
如果为 true,则自动检测内容中的中文/日文/韩文语言。这将使 .Summary
和 .WordCount
对于 CJK 语言正确地工作。
imaging
参见图像处理配置。
languageCode
默认值: ""
由RFC 5646 定义的语言标签。此值用于填充:
languages
参见配置语言。
disableLanguages
参见禁用语言。
markup
参见配置标记。
mediaTypes
参见配置媒体类型。
menus
参见菜单。
minify
参见配置压缩。
module
模块配置参见模块配置。
newContentEditor
默认值: ""
创建新内容时使用的编辑器。
noChmod
默认值: false
不同步文件的权限模式。
noTimes
默认值: false
不同步文件的修改时间。
outputFormats
参见配置输出格式。
paginate
默认值: 10
默认的分页每页元素数目,参见分页。
paginatePath
默认值: “page”
用于分页的路径元素(https://example.com/page/2
)。
permalinks
参见内容管理。
pluralizeListTitles
默认值: true
在列表中使用复数形式的标题。
publishDir
默认值: “public”
Hugo 将写入最终静态站点的目录(包含 HTML 文件等)。
related
参见相关内容。
relativeURLs
默认值: false
启用后,所有相对 URL 将相对于内容根目录。请注意,这不影响绝对 URL。
refLinksErrorLevel
默认值: “ERROR”
使用 ref
或 relref
解析页面链接时,如果无法解析链接,将使用此日志级别记录。有效值为 ERROR
(默认值)或 WARNING
。任何 ERROR
都会导致构建失败(exit -1
)。
refLinksNotFoundURL
用于在 ref
或 relref
中找不到页面引用时使用的占位符 URL。使用原样。
removePathAccents
默认值: false
|
|
rssLimit
默认值: -1(无限制)
RSS 订阅中的最大项数。
sectionPagesMenu
参见菜单。
security
参见安全策略。
sitemap
默认的站点地图配置。
summaryLength
默认值: 70
.Summary
中显示的文本长度(按照单词计算),用于自动摘要拆分。
taxonomies
参见配置分类法。
theme
参见模块配置 如何导入主题。
themesDir
默认值: “themes”
Hugo 从中读取主题的目录。
timeout
默认值: “30s”
生成页面内容的超时时间,以持续时间 或秒为单位指定。注意: 这用于递归内容生成的退出。如果您的页面生成缓慢(例如因为它们需要大型图像处理或依赖于远程内容),则可能需要增加此限制。
timeZone
时区(或地理位置),例如 Europe/Oslo
,用于解析没有此类信息的前置元数据日期和time
函数。有效值列表可能与系统相关,但应包括 UTC
、Local
和IANA 时区数据库 中的任何位置。
title
站点标题。
titleCaseStyle
默认值: “ap”
参见配置标题大小写。
uglyURLs
默认值: false
启用后,URL 将采用 /filename.html
的形式,而不是 /filename/
。
watch
默认值: false
监视文件系统的更改,并根据需要重新创建。
如果您在 *nix 系统上开发您的网站,则以下命令行快捷方式很有用,可以找到配置选项:
1 2
cd ~/sites/yourhugosite hugo config | grep emoji
输出示例:
1
enableemoji: true
配置构建
build
配置部分包含全局构建相关的配置选项。
hugo.yaml
:
|
|
buildStats
当启用时,在项目根目录下创建一个 hugo_stats.json
文件。该文件包含发布站点中每个HTML元素的 class
属性、id
属性和标签的数组。在从您的站点中删除未使用的CSS时,可以使用此文件作为数据源。这个过程也称为剪枝(pruning)、清理(purging)或摇树(tree shaking)。
通过 disableClasses
、disableIDs
和 disableTags
键从 hugo_stats.json
中排除 class
属性、id
属性或标签。
在v0.115.0及更早版本中,通过将
writeStats
设置为true
来启用此功能。虽然仍然可用,但writeStats
键将在将来的版本中被弃用。由于CSS清理通常仅限于生产构建,因此将
buildStats
对象放在 config/production 之后。为了提高速度,解析发布站点时可能会出现“误报”(例如,不是HTML元素的HTML元素)。这些“误报”很少且无关紧要。
由于部分服务器构建的性质,新的HTML实体在服务器运行时添加,但旧值在您重新启动服务器或运行常规
hugo
构建之前不会被删除。
cachebusters
参见配置缓存破坏
noJSConfigInAssets
关闭将 jsconfig.json
写入 /assets
文件夹的功能,并映射从运行的 js.Build 导入的内容。此文件旨在帮助代码编辑器(如VS Code)中的智能感知/导航。请注意,如果您不使用 js.Build
,则不会写入任何文件。
useResourceCacheWhen
何时使用 /resources/_gen
中缓存的资源进行 PostCSS 和 ToCSS。有效值为 never
、always
和 fallback
。最后一个值意味着如果 PostCSS/扩展版本不可用,则尝试使用缓存。
配置缓存破坏
添加了 build.cachebusters
配置选项,以支持使用 Tailwind 3.x 的 JIT 编译器进行开发,其中 build
配置可能如下所示:
hugo.yaml
:
|
|
上面的示例中的一些关键点是 writeStats = true
,它会在每次构建时将一个 hugo_stats.json
文件与渲染输出中使用的 HTML 类等写入。对此文件的更改将触发 styles.css
文件的重建。您还需要将 hugo_stats.json
添加到 Hugo 的服务器监视器中。有关运行示例,请参见 Hugo Starter Tailwind Basic。
source
一个匹配与 Hugo 中的一个虚拟组件目录(通常是 assets/...
)相关联的文件的正则表达式。
target
一个匹配资源缓存中应在 source
更改时过期的键的正则表达式。您可以在表达式中使用来自 source
的匹配正则表达式组,例如 $1
。
配置服务器
这仅在运行 hugo server
时相关,它允许在开发过程中设置 HTTP 标头,以便您可以测试内容安全策略等。配置格式与 Netlify 相匹配,但带有稍微更强大的 Glob 匹配:
hugo.yaml
:
|
|
由于这仅适用于“开发”,因此将其放在 development
环境下可能是有意义的:
config/development/server.yaml
:
|
|
您还可以为服务器指定简单的重定向规则。语法与 Netlify 类似。
请注意,status
为 200 的情况会触发 URL 重写,这在 SPA(单页面应用程序)情况下是您想要的,例如:
config/development/server.yaml
:
|
|
将 force=true
设置为 true
将使重定向即使路径中存在现有内容也会生效。请注意,在 Hugo 0.76 之前,force
是默认行为,但与 Netlify 的做法保持一致。
404 服务器错误页面
默认情况下,当运行 hugo server
时,Hugo 将使用 404.html
模板渲染所有 404 错误。请注意,如果您已经将一个或多个重定向添加到服务器配置,您需要显式添加 404 重定向,例如:
config/development/server.yaml
:
|
|
配置标题大小写
将 titleCaseStyle
设置为指定 title 模板函数和 Hugo 中自动生成的章节标题使用的标题样式。
可以是以下之一:
ap
(默认),美联社 (AP) 样式指南中的大写规则。chicago
,芝加哥手册中的规则。go
,Go 语言中的每个单词都大写。firstupper
,将第一个单词的首字母大写。none
,不使用大写。
配置环境变量
HUGO_NUMWORKERMULTIPLIER
可以设置此变量以增加或减少在 Hugo 中并行处理中使用的工作程序数量。如果未设置,将使用逻辑 CPU 的数量。
配置查找顺序
类似于模板的查找顺序,Hugo 在网站源代码目录的根目录中有一组默认规则来搜索配置文件作为默认行为:
./hugo.toml
./hugo.yaml
./hugo.json
在配置文件中,您可以指示 Hugo 如何渲染您的网站,控制网站的菜单,并任意定义特定于项目的全局参数。
示例配置
以下是配置文件的典型示例。嵌套在 params:
下的值将填充 .Site.Params
变量,供模板使用:
hugo.yaml
:
|
|
使用环境变量进行配置
除了上述3个配置选项外,还可以通过操作系统环境变量定义配置键值对。
例如,以下命令将在类 Unix 系统上有效地设置网站的标题:
|
|
如果您使用类似 Netlify 的服务部署站点,这非常有用。可以查看 Hugo 文档的 Netlify 配置文件 获取示例。
名称必须以
HUGO_
为前缀,并且在设置操作系统环境变量时,配置键必须使用大写。要设置配置参数,请将名称以
HUGO_PARAMS_
为前缀
如果使用的是蛇形命名法的变量名,则上述方法将不起作用。Hugo通过 HUGO
后的第一个字符来确定分隔符的使用方式。这允许您使用任何允许的分隔符在环境变量中定义变量,例如 HUGOxPARAMSxAPI_KEY=abcdefgh
。
Ignore content and data files when rendering
Note: This works, but we recommend you use the newer and more powerful includeFiles and excludeFiles mount options.
To exclude specific files from the content
, data
, and i18n
directories when rendering your site, set ignoreFiles
to one or more regular expressions to match against the absolute file path.
To ignore files ending with .foo
or .boo
:
hugo.yaml
:
|
|
To ignore a file using the absolute file path:
hugo.yaml
:
|
|
配置前置元数据
配置日期
日期在 Hugo 中非常重要,您可以通过向 hugo.toml
添加 frontmatter
部分来配置 Hugo 如何为您的内容页面分配日期。
默认配置如下:
hugo.yaml
:
|
|
例如,如果您的某些内容中有非标准的日期参数,您可以覆盖 date
的设置:
hugo.yaml
:
|
|
其中 :default
是默认设置的快捷方式。上述配置将将 .Date
设置为 myDate
中的日期值(如果存在),如果不存在,则会查找 date
、publishDate
、lastmod
,并选择第一个有效日期。
在右侧的列表中,以“:”开头的值是具有特殊含义的日期处理程序(见下文)。其他值只是您前置元数据配置中的日期参数的名称(不区分大小写)。还请注意,Hugo 对上述内容有一些内置别名:lastmod
=> modified
,publishDate
=> pubdate
,published
和 expiryDate
=> unpublishdate
。例如,使用 pubDate
作为前置元数据中的日期,在默认情况下,将分配给 .PublishDate
。
特殊的日期处理程序有:
:fileModTime
从内容文件的最后修改时间戳中提取日期。
例如:
hugo.yaml
:
|
|
上面的配置首先尝试从 lastmod
前置元数据参数中提取 .Lastmod
的值,然后从内容文件的修改时间戳中提取日期。最后,:default
在这里可能不需要,但 Hugo 最终将在 :git
、date
和 publishDate
中查找有效日期。
:filename
从内容文件的文件名中提取日期。例如,2018-02-22-mypage.md
将提取日期 2018-02-22
。另外,如果未设置 slug
,将使用 mypage
作为 .Slug
的值。
例如:
hugo.yaml
:
|
|
上面的配置首先尝试从文件名中提取 .Date
的值,然后将查找前置元数据参数 date
、publishDate
和最后是 lastmod
。
:git
这是该内容文件的最后一次修订的 Git 作者日期。只有在设置了 --enableGitInfo
或在站点配置中设置 enableGitInfo = true
时才会设置这个值。
配置额外的输出格式
Hugo v0.20 引入了将内容渲染为多种输出格式(例如 JSON、AMP html 或 CSV)的能力。有关如何将这些值添加到 Hugo 项目的配置文件的信息,请参阅输出格式。
配置压缩
默认配置如下:
hugo.yaml
:
|
|
配置文件缓存
自 Hugo 0.52 版本开始,您可以配置更多内容,而不仅仅是 cacheDir
。以下是默认配置:
hugo.yaml
:
|
|
您可以在自己的 hugo.yaml
中覆盖任何这些缓存设置。
关键词解释
:cacheDir
请参阅配置 cacheDir。
:project
当前 Hugo 项目的基本目录名称。这意味着,默认情况下,每个项目都有单独的文件缓存,这意味着当您运行 hugo --gc
时,不会触及其他运行在同一台计算机上的 Hugo 项目相关的文件。
:resourceDir
这是 resourceDir
配置选项的值。
maxAge
这是在缓存条目被驱逐之前的持续时间,-1 表示永久保存,0 有效地关闭了特定的缓存。使用 Go 的 time.Duration
,所以有效的值是 "10s"
(10 秒),"10m"
(10 分钟)和 "10h"
(10 小时)。
dir
缓存文件将存储在其中的绝对路径。允许的起始占位符是 :cacheDir
和 :resourceDir
(参见上文)。
配置格式规范
配置 cacheDir
这是 Hugo 默认存储文件缓存的目录。详见 配置文件缓存。
可以使用 cacheDir
配置选项或通过操作系统环境变量 HUGO_CACHEDIR
来设置它。
如果未设置该选项,Hugo 将按以下优先顺序使用:
- 如果在 Netlify 上运行:
/opt/build/cache/hugo_cache/
。这意味着如果您在 Netlify 上运行构建,所有配置为:cacheDir
的缓存将在下次构建时保存和恢复。对于其他 CI 供应商,请阅读其文档。有关 CircleCI 的示例,请参见 此配置。 - 在操作系统用户缓存目录下的
hugo_cache
目录,由 Go 的 os.UserCacheDir 定义。在 Unix 系统上,这是$XDG_CACHE_HOME
,由 basedir-spec-latest 指定,如果非空,则为$HOME/.cache
。在 macOS 上,这是$HOME/Library/Caches
。在 Windows 上,这是%LocalAppData%
。在 Plan 9 上,这是$home/lib/cache
。Hugo v0.116.0 中新增 - 在操作系统临时目录下的
hugo_cache_$USER
目录。
如果想知道当前的 cacheDir
值,可以运行 hugo config
,例如:hugo config | grep cachedir
。