配置

媒体类型配置

定义媒体类型及其后缀,供输出格式引用。

媒体类型(media type,旧称 MIME 类型)是标识文件格式的两段式名称,例如 HTML 内容的媒体类型是 text/html。在 Hugo 中,已配置的媒体类型有多种用途,其中之一是定义输出格式。下文给出 mediaTypes 区段的键名与默认值,并说明如何修改、新建媒体类型,以及如何注册没有后缀的媒体类型。

键名与默认值

mediaTypes 是一个映射:键为媒体类型名(如 text/html),值为该媒体类型的设置表。

键名 类型 默认值 含义
mediaTypes map 见下节默认表 媒体类型映射,键为媒体类型名。
mediaTypes.<类型>.delimiter string "." 文件名与后缀之间的分隔符。分隔符与后缀共同构成文件扩展名。
mediaTypes.<类型>.suffixes []string 因媒体类型而异,见下节 与该媒体类型关联的后缀,第一个后缀是主后缀。

默认媒体类型

默认配置中的媒体类型及其后缀如下:

媒体类型 后缀
application/json json
application/manifest+json webmanifest
application/octet-stream 无
application/pdf pdf
application/rss+xml xml、rss
application/source-map map
application/toml toml
application/wasm wasm
application/xml xml
application/yaml yaml、yml
font/otf otf
font/ttf ttf
font/woff woff
font/woff2 woff2
image/avif avif
image/bmp bmp
image/gif gif
image/heic heic
image/heif heif
image/jpeg jpg、jpeg、jpe、jif、jfif
image/png png
image/svg+xml svg
image/tiff tif、tiff
image/webp webp
text/asciidoc adoc、asciidoc、ad
text/calendar ics
text/css css
text/csv csv
text/html html、htm
text/javascript js、jsm、mjs
text/jsx jsx
text/markdown md、mdown、markdown
text/org org
text/pandoc pandoc、pdc
text/plain txt
text/rst rst
text/tsx tsx
text/typescript ts
text/x-gotmpl gotmpl
text/x-sass sass
text/x-scss scss
video/3gpp 3gpp、3gp
video/mp4 mp4
video/mpeg mpg、mpeg
video/ogg ogv
video/webm webm
video/x-msvideo avi

表中的「后缀」一列就是各媒体类型关联的后缀。例如,Hugo 把 .html 和 .htm 文件与 text/html 媒体类型关联起来;application/octet-stream 在默认配置中没有定义后缀。

注意 第一个后缀是主后缀。为模板文件命名时应使用主后缀。例如为 RSS feed 创建模板时,使用 xml 后缀。

修改媒体类型

可以修改任何默认媒体类型。例如把 text/html 的主后缀从 html 换成 htm:

[mediaTypes.'text/html']
suffixes = ['htm','html']

注意这里把 htm 放在了数组首位,因此它成为主后缀。

如果改动了某个默认媒体类型,就必须同时显式地重新定义所有使用该媒体类型的输出格式。例如,要让上面的改动作用于 html 输出格式,就要重新定义它:

[outputFormats.html]
mediaType = 'text/html'

新建媒体类型

可以按需新建媒体类型。例如为 Atom feed 新建一个媒体类型:

[mediaTypes.'application/atom+xml']
suffixes = ['atom']

注册之后,就可以在输出格式的 mediaType 设置里引用它,具体写法参见输出格式配置。

无后缀的媒体类型

有时需要创建既没有后缀、也没有分隔符的媒体类型。例如 Netlify 会识别名为 _redirects 和 _headers 的配置文件,而 Hugo 可以用自定义输出格式生成它们。

为此,注册一个不带后缀和分隔符的媒体类型:

[mediaTypes.'text/netlify']
delimiter = ''

对应的自定义输出格式定义大致如下:

[outputFormats.redir]
baseName    = '_redirects'
isPlainText = true
mediatype   = 'text/netlify'
[outputFormats.headers]
baseName       = '_headers'
isPlainText    = true
mediatype      = 'text/netlify'
notAlternative = true