一个计算机技术爱好者与学习者

0%

好好学Hexo:Hexo使用gitalk作为评论插件

1. gitalk简介

Gitalk 是一个基于 GitHub Issue 和 Preact 开发的评论插件。

特点:

  • 使用 GitHub 登录
  • 支持多语言(en, zh-CN, zh-TW, es-ES, fr, ru)
  • 支持个人或组织
  • 无干扰模式(设置 distractionFreeMode 为 true 开启)
  • 快捷键提交评论 (cmd|ctrl + enter)

本文中,我们学习使用gitalk作为Hexo评论插件。

参考文档:

2. 准备工作

想要使用gitalk,需要申请GitHub Application

如上图,以郝同学的申请为例:

  • Application name填入喜欢的应用名称。
  • Homepage URL填入域名。
  • Application description填入应用的描述。
  • Authorization callback URL 填入域名。

然后,Register application,转到应用页面。在该页面,可以看到Client ID和Client Secret。

3. 配置使用gitalk

3.1. yilia主题配置

具体配置内容参考hexo-theme-yilia - commit/6e339354

最终效果如下图:

打开一些页面的时候,报错:Error: Validation Failed.
在gitalk的issue中发现,如果location.pathname大于50,就会报这个错误。

采用md5编码url的方式来解决这个问题,也已经包含在commit/6e339354中了,配置方法参考文档:

3.2. next主题配置

具体配置内容参考hexo-theme-next - commit/c5b354d2

4. 批量初始化

比较麻烦的是,每篇文章都需要初始化!因此需要搞一个批量初始化的脚本。

具体配置内容参考hexo-deploy - commit/e11e8ec8

1、测试生成 sitemap.xml

1
2
hexo g
cat public/sitemap.xml

2、批量初始化 issues

1
node init-gitalk.js

批量初始化可以集中到package.json,添加

1
2
3
4
5
{
"scripts": {
"gitalk": "node init-gitalk.js"
},
}

对应批量初始化命令改为:

1
npm run gitalk

注意:如果文章比较多,那么无法一次性初始化成功,因为github api免费版限制每小时写issue请求为60,超过则会报错:

1
2
"message": "You have exceeded a secondary rate limit and have been temporarily blocked from content creation. Please retry your request again later."
"documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#secondary-rate-limits"

参考文档:

5. 后记

Hexo评论插件对比

  • 多说,挺好用,下线了
  • 畅言,广告太多,弃用
  • disqus,靠谱,但是被墙
  • gitalk,初始化麻烦,加载慢
  • livere,加载慢,广告需自行屏蔽