Hexo相关问题及优化
Manny

使用了Hexo一段时间,发现了一些问题,特在此记录。

分类和标签

Hexo 项目初始状态下并没有 Categories(分类)、Tags(标签)、Links(友链)、About(关于)等页面,需要自己手动创建。

  • 分类
1
hexo new page categories
  • 标签
1
hexo new page tags

执行上述命令后,Hexo会创建分类和标签页面。你在 Front Matter 中设置的分类会在其中显示。

  • 关于
1
hexo new page about

此时你可以在Hexo项目 /source/about/index.md 中填写关于页面。


自定义域名

如果你跟我一样部署到Github上,且不想用默认的 <username>.github.io 域名,则可以自定义域名。

  1. 在域名注册商 or 托管服务商中添加一条 CNAME 记录

CNAME 记录把域名解析到另一个域名

image

  1. 管理自定义域

Github文档:管理自定义域

进入自己站点仓库的 Settings | Page 页面,输入自己的域名,强制开启HTTPS。

image

查看 Source

image

Github Actions,填写完域名后无需其它操作。

Deploy from a branch,它会创建 CNAME 文件,并提交到源分支的根目录。

注意:使用Gtihub Actions自动构建时会重新生成站点,该 CNAME 文件会消失,自定义域名失败。故应该在Hexo项目 /source 目录下创建 CNAME 文件,这样每次提交Hexo项目并自动构建后 CNAME 文件还会在站点中。

CNAME 文件内容:

1
your domain

自动构建博客更新时间BUG

git 在推送更新时,并不记录保存文件的访问时间、修改时间等元信息。又因为如果没有在 front-matter 中指定 updated,Hexo 会默认使用文件的最后修改时间作为文章的更新时间,所以会出现 CI 构建后所有文章的更新时间都变成了此次构建的时间。

在自动部署文件中添加以下代码:该条命令会将文件的最后修改时间修改为 Git 仓库中文件的最后提交时间,即文章的更新时间。

大白话:如果不干预,那么文件最后的修改时间就是此次的构建时间,从而出错。文件的最后修改时间必须和Git仓库中最后的提交时间一致才是正确的。

1
2
- name: Restore file modification time 
run: find source -name '*.md' | while read file; do touch -d "$(git log -1 --format="@%ct" "$file")" "$file"; done

设定Checkout的参数 fetch-depth: 0,因为 0 表示获取所有分支和标签的所有历史记录。

1
2
3
4
- name: Checkout
uses: actions/checkout@master
with:
fetch-depth: 0
 评论