从 2017 年使用 Hexo 生成 blog 到现在已经过去很长时间了,自己也修改网页的样式,添加了许多实用的功能。但一直以来 Hexo 生成静态资源的速度不是那么的快,甚至需要好几秒的时间。直到后来使用 Hugo 的时候发现,Hugo 在这方面是真的快,仅需几百毫秒就可以生成静态资源。这就萌生了我从 Hexo 转换到 Hugo 的想法,毕竟 Hugo 是用 Go 写的嘛。

从 Hexo 转到 Hugo 还是有不少坑的。没错,我就是一个一个地跳到坑里之后,才有了这篇文章。本文是在 Windows 环境下进行的,对于其它环境道理也是相通的。

安装并配置 Hugo

安装 Hugo

Install Hugo 页面可以根据不同的环境选择性地安装,而在 Windows 下,首先需要到 Hugo Release 下载压缩包,当前版本是 hugo_0.59.1_Windows-64bit.zip

解压之后会得到 hugo.exeLICENSE 以及 README.md 文件,你可以在任意一个盘符下新建一个名为 Hugo 文件夹,然后在该文件夹下新建一个 bin 文件夹,最后将解压出的 hugo.exe 放到 bin 下即可。如下图所示:

image.png

对于 LICENSE 以及 README.md 文件可以删除掉,不需要使用。 按照官网的要求,它让我们在 Hugo 下创建一个 Sites 文件夹,该文件夹不用创建也可以,我们待会儿用 Hugo 命令直接在任意一个盘符下创建一个自己博客的名字即可,例如取名为 myblog

配置环境变量

这一步将 D:\hugo\bin 添加到 PATH 中即可,配置完成后可以使用 hugo version 查看一下版本号。如下图所示:

image.png

创建站点

D 盘下使用如下命令创建站点:

1
hugo new site myblog

然后会出现如下信息:

Congratulations! Your new Hugo site is created in D:\myblog.

Just a few more steps and you’re ready to go:

  1. Download a theme into the same-named folder. Choose a theme from https://themes.gohugo.io/, or create your own with the “hugo new theme ” command.
  2. Perhaps you want to add some content. You can add single files with “hugo new /.”.
  3. Start the built-in live server via “hugo server”.

Visit https://gohugo.io/ for quickstart guide and full documentation.

之后在 myblog 下会生成几个文件夹:

  • archetypes: 这里面是一个模板,每当你使用 hugo new post/filename.md 创建文章的时候, Hugo 会按照这里面的格式帮你生成。记得将 draft 设置为 false,要不然你相当于一直在草稿上写字,而不会被添加到博客中。
  • content: 这里面存放你写的文章,可以在该文件夹下创建一个 post 文件夹用于存放每篇文章,创建一个 about.md 文件用于展示 关于我 页面。
  • data: 用于存放其它数据文件,供 Hugo 在生成网站时使用。
  • layouts: 用于存放自定义的样式布局文件。
  • static: 用于存放静态文件,可以是博客中的图片、文件,或者网站的各种样式的 favicon.ico 图标。
  • themes: 用于存放不同的主题。
  • config.toml: 用于配置网站的各种参数,如网站的格式、页面的颜色、网站最底部的展示信息等。

安装主题

你可以在 Hugo 的 主题网站 上选择自己喜欢的各种主题,这里我以 even 主题为例。

myblog 根目录下,使用如下命令获得主题:

1
2
git init
git submodule add https://github.com/olOwOlo/hugo-theme-even themes/even

由于我之前使用 Hexo 在 Github 上部署了博客,所以这里使用了 git submodule 命令。如果你是第一次将博客部署到 Github 的话,那么使用如下命令即可:

1
2
git init
git clone https://github.com/olOwOlo/hugo-theme-even themes/even

下载完成以后,会在 D:\myblog\themes\even\exampleSite 下有一个 config.toml 文件,将该文件复制到 myblog 下即可使用 even 主题。

这里参考了这篇 安装主题 文章。

在安装主题的时候,为了给自己网站设置一个图标,可以用 favicon generator 生成各种各样的、适用于不同客户端的图标。使用方法在 even 的 Github 中也有说明,最后将该网站生成的文件放到 D:\myblog\static 下即可。

创建文章

如果你之前有使用过 Hexo 的话,那就方便多了,直接将你的文章拷贝到 D:\myblog\content\post 目录下,然后修改一些 头部信息 即可。

坑 1

之所以需要修改 头部信息,是因为 Hugo 使用的 datetagscategoriesHexo 是不同的。

Hexo 使用的头部格式:

1
2
3
4
5
6
7
8
---
title: '国庆小记'
date: 2018/10/8 10:28:27
tags:
  - 生活
categories: 感悟
comments: true
---

Hugo 使用的格式:

1
2
3
4
5
6
7
---
title: '国庆小记'
date: 2018-10-08T10:28:27+08:00
tags: ["生活"]
categories: ["感悟"]
draft: false
---

你可以很明显的看出它俩的不同,其中 Hugo 中的 +08:00 表示时区,draft 置为 false 表示这不是一个草稿文件,这是要准备上传到 Github 的文章。

坑 2

config.toml 中加入如下设置可以实现和 Hexo 一样的 url 链接,即 YYYY/MM/DD/post_name/

1
2
[permalinks]
  post = "/:year/:month/:day/:filename/"

本地预览

现在可以在根目录下,键入如下命令,打开 localhost:1313 即可预览你的网站。

1
hugo server

上传到 Github

坑 3

由于 Hugo 默认会将网站的分类名称 以及 url 中的大写字符改为小写,所以为了大小写统一,在上传之前最好对 ‪D:\myblog\config.toml 文件进行一些修改。

如果不想让 url 进行大小写的转换,可以在文件中添加如下设置:

1
disablePathToLower = true

如果不想让网站的分类名称转换为小写,则可以加入:

1
preserveTaxonomyNames = true

部署

由于之前使用 Hexo 在 GitHub 上部署过,所以远程仓库还有之前的文章。现在可以在博客的根目录下新建一个文件夹,让 Hugo 每次将静态文件都生成到该文件夹下,通过 Git 将该文件下的内容全部上传到 GitHub 即可。

public 文件夹下键入如下命令:

1
2
git init
git remote add upstream https://github.com/dyfloveslife/dyfloveslife.github.io.git

注意要将 url 替换成你自己的网址。

然后回到 myblog 目录下,键入如下命令,让 Hugo 生成静态资源到 public 下:

1
hugo -t even

由于之前在 static 文件夹下放入了许多图标,所以执行完上面的命令以后,public 文件夹下就会生成许多文件夹和网站图片。

其次,进入 public 文件夹,将里面的文件全部上传即可,如下所示:

1
2
3
git add .
git commit -m  "switch to hugo"
git push -f upstream master

由于之前远程仓库有文件,所以根据 这里 所说的,进行强制 push 操作。

除此之外,可以参考 Hugo 官网 写一个脚本 deploy.sh 放到 D:\myblog 下,这样在上传的时候会方便一些,如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# If a command fails then the deploy stops
set -e

printf "\033[0;32mDeploying updates to GitHub...\033[0m\n"

# Build the project.
hugo -t even # if using a theme, replace with `hugo -t <YOURTHEME>`

# Go To Public folder
cd public

# Add changes to git.
git add .

# Commit changes.
msg="rebuilding site $(date)"
if [ -n "$*" ]; then
	msg="$*"
fi
git commit -m "$msg"

# Push source and build repos.
git push upstream master

然后执行 ./deploy.sh 即可上传。

添加 Disqus 评论

虽然说国内有不少支持博客的评论系统,访问速度要快一些。但我还是使用之前在 Hexo 里面设置的 Disqus 评论系统,毕竟国内像 多说 这样的已经不能使用了。

设置方法也很简单,直接修改 config.toml 文件中的 disqusShortname 字段设置为你在 Disqus 注册的名字即可,如下:

1
disqusShortname = "SirCarol"