Hugo入门和文档摘记
Hugo好用虽好用,文档写的确实也非常混乱。暂且记一下这次迁移和魔改主题中遇到的东西。
pic from hugo

在每年惯例的重置电脑之后,发现hexo的node.js版本居然被限制在了现有的LTS版本(14)之下😓

鉴于本来就不怎么用node,干脆直接卸载了事,也把博客迁移到了目前的Hugo引擎下。

对于Go语言只有粗粗了解过,这次也遇到了不少坑,记录一下供之后使用。

参考:Hugo Doc & Community

建站

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的配置文件支持tomlyamljson格式,由于新建时默认的格式为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管理。

官方推荐了几种方式,这里只写一种。

  1. 配置publishDir = "docs",之后可以直接选择/docs文件夹作为pages的构建文件夹。

  2. hugo命令生成。

  3. 提交更改,写commit,push。

  4. 在项目设置页面选择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