Hugo Setup Notes: From Zero to One
Hugo Installation
Official Documentation Tutorial
The official website provides detailed installation tutorials for different systems: https://gohugo.io/installation/
Brew
If you are a Mac user, you can use the brew command to install it.
brew install hugoNote: This installation method may not install the latest version of hugo. If you want to use the latest version of hugo, please install it in another way.
Configuration File Format
As a beginner, which configuration file format to choose—yaml, toml, or json—became my first question.
TOML
- Case-sensitive
- Files can only contain UTF-8 encoded Unicode characters
- Not sensitive to indentation
YAML
- The file starts with ' - ', marking the beginning of the document
- Key-value pairs are separated by colons
- Lists start with hyphens
- Uses indentation with one or more spaces to describe nested collections
JSON
- Data is stored in name/value pairs
- Records are separated by commas. Trailing commas without following properties are not allowed
- Property names and strings are wrapped in double quotation marks
- Single quotation marks are not allowed
String Differences
Strings are supported in any format, but JSON does not support multiline strings and also does not support comments.
# TOML
key = "String Value"
multiline = """\
The quick brown \
fox jumps over \
the lazy dog.\
"""# YAML
key : String Value
multilinePreservedLinebreaks:
|
L1 - The quick brown
L2 - fox jumps over
L3 - the lazy dog.
multilineReplaceLinebreaksWithWhitespace:
>
This sentence ist just too long to keep it
on the same line.// JSON
{
"key": "String Value"
}Because of the relatively troublesome comment syntax of JSON and the strict indentation requirements of YAML, I ultimately chose TOML as the configuration file format. I can also indent freely, making it easier for me to read.
Scattered Knowledge Points
- This symbol
:=is an assignment operator in the Python language (mainly called the walrus operator). The walrus operator compresses our code to make it shorter.
var a; //定义
a = 1; //赋值layout/baseof.htmlis the foundation of all pages- The
layout/partialsfolder can contain partial sections such asheader,footer, etc. - Steps to add a new page:
- You need to add a
.mdfile incontent - Add a page with the same name in
layouts/_default - Code for activating the
activestate of the menu: - According to the method in the official website's instructions, the
activestate cannot be added successfully, so I looked for another way to determineactive
{{ range .Site.Menus.main }}
{{- $menu_item_url := (cond (strings.HasSuffix .URL "/") .URL (printf "%s/" .URL) ) | absLangURL }}
{{- $page_url:= $currentPage.Permalink | absLangURL }}
<li>
<a {{- if eq $menu_item_url $page_url }} class="active" {{- end }} href="{{ .URL }}">
{{ .Pre }}
<span>{{ .Name }}</span>
</a>
</li>
{{ end }}- A small knowledge point about the
positionfunction in css!
.outer {
position: relative;
}
.inner {
position: absolute;
top: 0px;
left: 0px;
}Shortcodecan simplify code and write some methods. It is similar to afunction. For specific writing methods, refer to: Hugo-basic