更新

  • 2020/07/08 更新部署命令参数
  • 2018/07/22 初次发布

介绍

The world’s fastest framework for building websites

Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again.

The world’s fastest framework for building websites | Hugo

环境

  • macOS 10.13.2
  • Python 2.7.10

快速开始

Quick Start | Hugo

1
brew install hugo

Hugo 有提供社区制作的迁移工具链接: Migrate to Hugo | Hugo

官方提供了 import jekyll 命令与两个社区迁移工具

迁移尝试一

使用官方提供的 hugo import jekyll 子命令执行时出错:

1
2
3
4
Importing...
panic: assignment to entry in nil map

...

hugo import jekyll | Hugo

迁移尝试二

最后提交是 2016 年 5 月 fredrikloch/JekyllToHugo: Small script for converting jekyll blog posts to a hugo site

1
2
3
4
5
$ python jekyllToHugo.py -h
Traceback (most recent call last):
  File "jekyllToHugo.py", line 35, in <module>
    import yaml
ImportError: No module named yaml

两个 Python 工具都依赖 yaml 库,需要手动安装

1
sudo pip install pyyaml

开始前需要清理 .DS_Store 文件,使用以下命令清理

1
find . -type f -name ".DS_Store" -print -delete

迁移尝试三

最后提交是 2015 年 9 月 coderzh/ConvertToHugo: Convert blog from Jekyll to Hugo

1
python ConvertToHugo.py <jekyll_root>/_posts/ <hugo_root>/content/posts/

批量处理了 52 篇之后 Hugo 居然没有检测到,于是重启 Hugo 终于可以看到转换之后的效果。

正式迁移

初始化

1
2
3
4
5
hugo new site <site>
cd <site>
git init
git add .
git commit -m "Initial commit"

设置主题

1
2
3
4
5
cd themes
git clone https://github.com/jrutheiser/hugo-lithium-theme
rm -rf hugo-lithium-theme/.git/
git add .
git commit -m "Add theme hugo-lithium-theme"

美化

修改设置、增加 logo、去除 google CSS 引用、增加 about 页面

迁移日志

使用之前介绍的迁移尝试三中的 coderzh/ConvertToHugo,由于需要将日期增加到日志链接中,同时保留之前链接的跳转,所以要稍微改造下脚本。

首先改造脚本增加导出 aliases 功能,因为原有链接是带有 .html 扩展名的,在生成 alias 需要增加扩展名。

其次由于默认生成的 yaml 中的数组并未正确缩进两个空格,还需要修正一下:python yaml.dump bad indentation - Stack Overflow

1
python ConvertToHugo.py <jekyll_root>/_posts/ <hugo_root>/content/post/

部署

直接按照官方文档中的 rsync 方法即可: Deployment with Rsync | Hugo

最近在查看 Google Analytics 时发现记录中出现了曾经使用过的 URL,应该是文章发布后发现 URL 错误,在修改前被搜索引擎索引了。

在调用 hugo 命令时,强列建议使用以下参数:

1
2
--cleanDestinationDir    remove files from destination not found in static directories
--gc                     enable to run some cleanup tasks (remove unused cache files) after the build

--cleanDestinationDir 参数可以帮助删除输出目录 public 中手动放置的文件或曾经在 static 目录中的文件(默认 hugo 会将 static 中的文件原样拷贝到输出目录 public 中)。

--gc 参数可以自动清理之前不再使用的 URL,例如一篇文章可能改过多次 URL,启用此参数会只保留最后一个有效的 URL 目录与文件,其他残留的 URL 目录与文件会自动删除。

最终的命令是:

1
hugo --cleanDestinationDir --gc && rsync