Migrate From Hexo to Hugo

2022/09/12

中秋节假日期间,得空将过去基于Hexo的个人博客迁移到了Hugo体系,迁移的原因不外乎两个:

  1. Hexo页面生成越来越慢了,不到100篇博文花了5秒,Hugo则是出名的快,体验更好;
  2. Hugo位于Golang生态,三方工具也很丰富,至少,没有比Hexo差太多。

此外,Golang是我近两年的主语言,用上Hugo之后若遇到问题,我应该有能力解决。

由Hexo迁移至Hugo

在Hexo下,我有两个站点:主站(www.slackideas.com)和子站(www.slackideas.com/PostgresWorld)。

→ tree .
.
├── Adaptance.md
├── A-Glance-Through-the-Window-of-Office-Two-Pictures
│   ├── A.png
│   ├── B.png
├── A-Glance-Through-the-Window-of-Office-Two-Pictu.md
...

→ tree postgresworld/
postgresworld/
├── best_practice_auto_partitioning.md
├── weekly_updates_2022w01.md
├── weekly_updates_2022w02.md
...

借这次迁移的机会,顺便将两站合二为一,以后就更方便维护了。想要完成这个目标,需要做两件事:

  1. 原Hexo博客的markdown文章要迁移至Hugo
  2. 原来文章的URL不能变,也就是说,Hugo这里要适配2套URL

文章和图片的迁移

文章好说,都是markdown文件,挪一下位置就行。

图片怎么办?Hexo下面带图文章的管理是这样的,带图的文章会存在一个同名目录,目录中放置与该文章相关的本地图片。Hugo下面的带图文章管理则是,文章和图片都放在一个目录中,文章命名index.md,图片采用相对路径引用(即如./1.png)。

按照这个规则,写了shell脚本一键迁移文章和脚本。

#!/usr/bin/env bash
SCRIPT_PATH=$(cd `dirname $0`; pwd)
cd $SCRIPT_PATH

cp=/usr/bin/cp
# 源Hexo的文章目录
SRC=source/_posts
# 对应目标Hugo的content/posts目录
DST=source/hugo_posts

mkdir -p $DST
/usr/bin/rm -rf $DST/*

for item in `ls $SRC`; do
    # 对于有本地图片的文章,将(图片)目录先行拷贝迁移
    if [ -d $SRC/$item ]; then
        $cp -r $SRC/$item $DST/
    fi
done

for item in `ls $SRC`; do
    if [ -f $SRC/$item ]; then
        # 对于有本地图片的文章,文件需改名index.md
        if [ -d $DST/${item%%.*} ]; then
            $cp -f $SRC/$item $DST/${item%%.*}/index.md
        else
        # 对于没有本地图片的简单文章,直接拷贝迁移
            $cp -f $SRC/$item $DST/
        fi
    fi
done

URL适配

Hugo支持对content的不同子目录,设置不同的permalink,我采用如下配置将原本主站和子站的URL模式保留不变。

// 取消URL路径自动小写
disablePathToLower: true
permalinks:
  // posts目录存放主站的文章和图片
  posts: "/:year/:month/:day/:slug/"
  // postgresworld目录存放PostgresWorld子站的文章和图片
  postgresworld: "/PostgresWorld/:year/:month/:day/:filename/"

Google网站统计

Hugo内置了Google Analytics模板,使用方式如下:

  1. 在主题模板的合适位置添加模板引用代码
{{ template "_internal/google_analytics_async.html" . }}
  1. 在Hugo配置中添加Google Analytics ID(在GA账号页-管理-媒体资源-数据流中可查看)
googleAnalytics: "G-XXXXXXX"

utterances评论

utterances的介绍:

A lightweight comments widget built on GitHub issues. Use GitHub issues for blog comments, wiki pages and more!

官方主页做好配置后,将script脚本添加到主题模板的合适位置即可。