一切源于我这个颜党的喜新厌旧。
总想找到一个极简而不失现代感的主题,在这个过程中,发现越来越多比较贴近我口味的主题都是适配 Hugo 的。趁最近有时间,就换了过来。
创建一个空站点
|
|
写一篇新文章
|
|
Hugo 需要自己指定文章的相对路径和文件名,这一点不如 Hexo 自动化程度高。
迁移文章
注意:以下命令和脚本仅适用于本博客,不加判断地使用可能会修改不需要变动的内容。
统一文章后缀
历史原因,用过的文件后缀不止一种,这次把.mkd
和.markdown
统一成.md
。
|
|
删除不兼容的 Front Matter
|
|
修改不规范的 Front Matter
我用单分类、多标签的方式管理文章,所以以前都是把分类名直接写在categories:
后面了,Hugo 要求必须使用连接符前缀另起一行。
|
|
也是因为历史的原因,有的文章没有日期时间,有的格式也不统一。Hugo 对日期时间的格式要求比较严格。这里把所有没有秒的时间后补全。
|
|
替换文章摘要标签
Hugo 不允许“more”两侧有空格:
|
|
补充和转换复杂内容
此外还有诸如日期时间缺失、转换 Octopress 标签到 Markdown 格式等问题,另外为了保持 Permalink 不变,准备每篇文章都补充一个Front Matter slug
。所以写了一个 PHP 脚本:
|
|
执行:
|
|
实现全文检索
默认的 Lunr 方式开箱即用,但速度较慢,而且中文分词做得不好。所以使用 Algolia 实现。
注册账号并选用免费方案后,在“API Keys”页面复制“Application ID”、“Search-Only API Key”和“Admin API Key”。
在项目根目录下创建 .env
文件:
|
|
APP_ID
和 ADMIN_KEY
是前面复制的三项中的值,INDEX_NAME
是 Algolia 上的索引名称,随便起一个就行。INDEX_FILE
是生成站点时自动生成的索引文件的路径,一般不需要修改。
安装自动提交索引到 Algolia 的脚本:
|
|
执行提交:
|
|
因为我所用的主题是支持 Algolia 的,所以把 “Application ID”、“Search-Only Key”和索引名称填到配置文件中对应的项后就可以使用搜索了。
添加评论功能
用了很多年 Disqus ,这次打算换用 Github Issues ,选择了 Utterances 。
主题原生支持,注册账号后简单配置即可。
Favicon
原来简单粗暴地用了唯一在的图标文件,这次改用 Favicon Generator 生成一套对多平台浏览器优化的图标。
把全套文件放到 static/
目录下即可。
部署到 Github Pages
Github Pages 支持多种站点生成方式,由于 Hexo 默认使用 master 分支管理生成的静态资源,而站点源码存放在 source 分支,所以我打算沿用这个方案,在继续使用 master 分支存放静态资源的同时,新增一个 hugo 分支,管理源码。
手动部署
Hugo 会将生成的静态资源存放在项目根目录下的public
目录中,所以需要将 master 分支检出到该目录:
|
|
生成站点并部署:
|
|
很快就能看到新网站了。
自动部署
Hugo 并没有提供 Hexo 那样的自动部署命令,所以要么把上述手动部署的命令写成脚本,要么使用自动部署工具,恰好 Github Actions 可以很好地实现。
创建 .github/workflows/main.yml
文件:
|
|
注意替换 ALGOLIA_APP_ID
的真实值,并把 Algolia 的“Admin API Key”添加到 Github 项目设置中的“Secrets”里,名称为“ALGOLIA_ADMIN_KEY”。
以后再在 hugo 分支推送新的提交时,Github Actions 就会自动执行部署操作。
从06年在中国博客网上开始写文章,到后来换到个人搭建并售卖的 Wordpress,五年颠沛流离的博客生涯终于在12年结束并定居到 Github 上,之后 Octopress 一用就又是五年。17年,因为 Octopress 转换速度太慢,换成了 Hexo。
我想,这次折腾之后,应该能再安分五年吧。