hugo工作流程#
- 导入主题后,完成自定义配置和资源
</>
markdown
1- config yaml/toml/json
2- assets
3 - css
4 - js
5 - images
6- layouts
7 - 404.html : 404错误页面模板
8 - _default/ : 默认模板
9 - baseof.html : 基础模板框架
10 - list.html : 列表页模板(如分类、标签页)
11 - single.html : 单内容页模板(如文章页)
12 - terms.html : 分类列表模板(如所有标签的列表)
13 - partials/ : 可重用部分模板
14 - header.html : 页头部分
15 - footer.html : 页脚部分
16 - head.html : <head>部分
17 - ... : 其他部分模板
18 - shortcodes/ : 短代码模板
19 - figure.html : 图片短代码
20 - ... : 其他短代码
21 - index.html : 首页模板
22 - section/ : 分区模板(如博客、文档等)
23 - blog.html : 博客分区模板
24 - ... : 其他分区模板
25 - taxonomy/ : 分类法模板
26 - category.html : 分类页面模板
27 - tag.html : 标签页面模板
28 - ... : 其他自定义模板所有layouts模板均可
- 通过 {{ define “blockname” }} 和 {{ block }} 继承主题逻辑
限制:需要原模板使用{{ block “blockname” . }}定义了对应block,才能继承这个block,并添加自定义逻辑
</>
html
1{{ define "blockname" }}
2
3 <!-- 你的自定义内容 -->
4 <div>...</div>
5{{ end }}- 直接复制主题的模板文件到自定义html中更改
自定义配置和资源#
config/_default 中的 yaml/toml/json格式基础全局配置#
- 所有配置文件可以随意增加用户自定义参数,但不同的文件中可能有不同的预定义参数
- 一般分为
- config.yaml
config配置一般是hugo原生预定义参数
</>
yaml
1# 部署网页url,如部署在Github pages上,需要改为github page的url,本地开发时无影响
2baseURL: "http://example.org"
3# 网站title
4title: "nayun blog"
5# 网站默认语言,影响本地化设置
6languageCode: "zh-cn"
7# 文档(内容文件)默认语言
8defaultContentLanguage: "zh-cn"
9# 主题
10theme: "blowfish"
11# markup也即markdown 相关设置
12# 参考https://hugo.opendocs.io/getting-started/%E9%85%8D%E7%BD%AE%E6%A0%87%E8%AE%B0%E8%AF%AD%E8%A8%80/
13markup:
14 goldmark:
15 renderer:
16 hardWraps: True # markup.goldmark.renderer.hardWraps 硬换行,md文档中强制单个回车换行(默认回车不会换行,而是双空格换行)- menu.yaml
导航栏目录,原生预定义参数,但不同主题可能有不同的主题预定义参数,以实现不同的效果,比如icon
</>
yaml
1main:
2 - identifier: "tech"
3 name: "技"
4 url: "/tech/"
5 weight: 2- params.yaml
完全由主题预定义参数构成
Blowfish调用链#
graph LR
A[baseof.html] --> B[head.html]
A --> C[header.html]
A --> D[main content]
A --> E[footer.html]
B --> F[CSS 资源]
B --> G[预加载资源]
C --> H[导航栏部分]
E --> I[JS 资源]
F --> F1[main.min.css]
F --> F2[syntax.min.css]
F --> F3[第三方字体]
G --> G1[preload 字体]
G --> G2[preload 图标]
I --> I1[theme.min.js]
I --> I2[第三方 JS]
I1 --> I1a[暗黑模式切换]
I1 --> I1b[移动端菜单]
I2 --> I2a[Alpine.js]
I2 --> I2b[HTMX]