在每年惯例的重置电脑之后,发现hexo的node.js版本居然被限制在了现有的LTS版本(14)之下😓
鉴于本来就不怎么用node,干脆直接卸载了事,也把博客迁移到了目前的Hugo引擎下。
对于Go语言只有粗粗了解过,这次也遇到了不少坑,记录一下供之后使用。
建站
Hugo文档中的Quick Start部分是基于MacOS的,这里写一下在Windows下的流程。
安装
直接使用Scoop安装:
scoop install hugo-extended
由于hugo-extend支持SASS解析,优先选择这个版本。
安装完成后执行hugo version
可以查看版本,hugo new site
新建一个站点。
目录结构
根据文档所述,hugo的目录结构如下:
.
├── archetypes 内容模板文件夹
├── config.toml 配置文件
├── content 内容文件夹
├── data 数据配置文件夹
├── layouts 静态生成模板文件夹
├── static 静态资源文件夹
└── themes 主题文件夹
在编译scss后,生成的资源文件会存放在resources
文件夹。
对于个人博客来说,data
文件夹几乎没有什么意义。
常用命令与参数
-
hugo help
查看可用命令,Hugo的命令数量不是很多,用用还是蛮方便的。
-
hugo -D
构建到
publishDir
,-D
参数用于指定生成标记为draft
的文章。 -
hugo new [path/name.md]
Hugo的new默认是在
content
文件夹下的,如果要新建到到posts文件夹里需要把相对路径写出来。 -
hugo server -D
在本地运行server。hugo支持热更新,保存文件后会立刻显示在server上。
配置
Hugo的配置文件支持toml
、yaml
和json
格式,由于新建时默认的格式为toml
,这里也以toml
格式为例。
baseURL = "https://blog.reska.moe/" #网站的根路径
languageCode = "zh" #区码,用于rss构建
DefaultContentLanguage = "zh-hant" #内容默认语言
title = "乌云蔽夜" #网站标题
theme = "diary" #主题
Paginate = 6 #分页文章篇数
publishDir = "docs" #生成站点的位置
[params]
hasCJKLanguage=true #开启CJK字数统计支持
[frontmatter]
#最后修改时间可从文件修改时间读取
lastmod = ["lastmod", ":fileModTime", ":default"]
[markup]
[markup.highlight]
style = "monokai" #code highlight 主题
[markup.goldmark]
[markup.goldmark.renderer]
hardWraps = true #将换行解析为</br>
更多的配置选项可以在文档查看。
主题
Hugo推荐使用git submodule的方式管理主题,在官方主题页面找到想要的主题之后,一般会在GitHub页面有安装说明。
git submodule add https://github.com/xxx/xxx.git theme/xxx
git submodule update --remote --merge
此外,官方似乎也在推进Hugo Modules的应用,由于我没有安装Golang,暂时没有尝试。
发布到GitHub Pages
Hugo让我感觉比Hexo用起来快乐的一点是,目录文件非常清晰,整个站点都可以直接使用Git管理。
官方推荐了几种方式,这里只写一种。
-
配置
publishDir = "docs"
,之后可以直接选择/docs
文件夹作为pages的构建文件夹。 -
hugo
命令生成。 -
提交更改,写commit,push。
-
在项目设置页面选择source为
/docs
当然也可以写个Github Action省略步骤2,但是好像也没啥区别。
拓展功能
Hugo有很多好玩的功能,写一点我感觉不错的。
shortcodes
简而言之就是对markdown的扩展,支持用短语句来代替复杂的html语句。
格式:
{/*规避解析*/{% shortcodename parameters %}}
Github Gist:
Hugo Pipes
类似于shell的管道功能,例如:
{{ $style := resources.Get "sass/main.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $style.Permalink }}">
这段代码将sass/main.scss
文件通过Hugo Pipes转为css文件,同时开启minification和Fingerprint(默认为sha256)
也可以通过pipes在资源文件里读取Hugo的params。
// assets/sass/template.scss
$backgroundColor: {{ .Param "backgroundColor" }};
$textColor: {{ .Param "textColor" }};
body{
background-color:$backgroundColor;
color: $textColor;
}
// [...]
{{ $sassTemplate := resources.Get "sass/template.scss" }}
{{ $style := $sassTemplate | resources.ExecuteAsTemplate "main.scss" . | resources.ToCSS }}
Hugo中的变量和函数
文档写的实在是太乱了,建议还是善用搜索。
几点:
- 不指定前缀的params会从当前页的frontmatter开始找,找不到就从站点的配置文件里找。
- 设置
enableGitInfo=true
,可以开启Git信息相关的变量。 - 如果实在是想不出怎么写了,可以试试无敌的printf,但是说不定找找就找到了呢。
- 如果把两个
partials
模板组合到一个大的模板里,变量是会通用的。
上次修改於 2021-01-24