关于博客更换评论系统的一场厮杀

Posted by Dorck on July 16, 2022

从去年建站 dorck.cn 开始到现在,我已经陆续更换过三四次评论系统了,以至于最近半年甚至都未开启这个功能,只因为它们太不稳定或者体验太差。有一阵子没更新博客了,重拾起来一段时间之后发现评论功能还是要有的,毕竟要客观了解到他人对于文章内容质量的看法,沟通的平台少不了的,更重要的一点是:以后遇到相关知识点还能应急性地自我评论,补充一二思路。

从最初的 畅言Valine 再到 Disqus,它们都找到了自己的适众,却唯独留不下我。畅言是国人维护的,经常断掉不够稳定;而 valine 需要绑定 LeanCloud,还要填一大堆备案信息等,麻烦至极,并且免费版的额度有限,骨鲠在喉;Disqus 我发现也不稳定,可能是因为国外平台的原因,需要梯子。索性这些我都放弃了,于是我等来了 GitalkGiscus,虽然迟了一些,但却是我想要的,因为它们本就离我很近。它们都是基于 Github 这个世界第一开源社区衍生出来的小产品,Gitalk 基于仓库的 issue 系统,而 Giscus 基于 Github 刚推出不久的 Discussion 功能,支持楼中楼回复,从体验上来说,我最终选择了后者。

由于我是基于 Jekyll 来建站的,所以下面就基于 Jekyll 来记录下如何分别配置 Gitalk 和 Giscus 评论系统。

Gitalk 配置

首先在 _includes/ 目录下创建 gitalk_comment.html 文件,拷贝内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div id="gitalk-container"></div>
 <link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css">
 <script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script>
 <script>
 var gitalk = new Gitalk({
     id: '2022-08-22 00:00:00 +0000',
     clientID: "{{ site.clientID }}",
     clientSecret: "{{ site.clientSecret }}",
     repo: "{{ site.repo }}",
     owner: "{{ site.owner }}",
     admin: "{{ site.admin }}", 
     labels: ['Gitalk'],
 })
 gitalk.render('gitalk-container')
 </script> 

然后在 _layouts/post.html 中加入头文件声明并在评论区设置的 Div 中追加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!--//添加GitTalk评论系统-->
 <link rel="stylesheet" href="/css/gittalk.css">
 <script src="/js/gittalk.min.js"></script>

<!-- .... -->

<!-- gitalk -->

    <div class="comment">
        <div id="gitalk-container"></div>
        <link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css">
        <script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script>
        <script>
                var gitalk = new Gitalk({
                    id: location.pathname,
                    clientID: "{{site.clientID}}",
                    clientSecret: "{{ site.clientSecret }}",
                    repo: "{{ site.repo }}",
                    owner: "{{ site.owner }}",
                    admin: "{{ site.admin }}", 
                    labels: ['Gitalk'],
                })
                gitalk.render('gitalk-container')
        </script>
    </div>

最后,只需要在 _config.yml 中配置一下 Github repository 等信息即可:

1
2
3
4
5
6
7
8
# GitTalk comment settings
 gitalk:
 enable: true
 owner: "GitHub repo owner"
 repo: "GitHub repo"
 clientID: "GitHub Application Client ID"
 clientSecret: "GitHub Application Client Secret"
 admin: ["GitHub repo owner and collaborators, only these guys can initialize github issues"]

Note:clientId 和 clientSecret 需要在 Github 个人设置的 Developer Settings 中 OAuth Apps 处申请。

Giscus 配置

Giscus 的优点有很多:

相对来说,Giscus 的配置更加简单,进入 Giscus 站点按需勾选后即可生成个人配置,里面也有具体步骤的操作细节,比较详细,这里只提一下代码中如何配置。

第一步,在 _includes/ 下创建 giscus_comment.html 文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- https://giscus.app/ -->
 <script async src="https://giscus.app/client.js"
 	data-repo="{{ site.giscus.repo }}"
 	data-repo-id="{{ site.giscus.repo_id }}"
 	data-category="{{ site.giscus.category }}"
 	data-category-id="{{ site.giscus.category_id }}"
 	data-mapping="{{ site.giscus.mapping }}"
 	data-reactions-enabled="1"
 	data-emit-metadata="0"
 	data-input-position="{{ site.giscus.input_position }}"
 	data-theme="{{ site.giscus.theme }}"
 	data-lang="{{ site.giscus.lang }}"
     data-loading="lazy"
 	crossorigin="anonymous"
 	async>
 </script> 

第二步,在 _layouts/post.html 中评论区处通过 include 引入 giscus_comment.html 评论组件:

1
2
3
4
5
<div class="comment">
   {% include giscus_comments.html %}
</div>

最后一步,只需要在 _config.yml 中加入 giscus 站点生成的个人 repo 相关配置信息即可:

1
2
3
4
5
6
7
8
9
10
# Giscus comment settings
 giscus:
   repo: "The discussion repository"
   category: "Custom category on github discussion"
   repo_id: "Giscus generated repo id"
   category_id: "Giscus generated category id"
   mapping: 'pathname'
   input_position: 'top'
   theme: 'Giscus generated theme style'
   lang: "en"

看官可根据自己喜好选择其一来使用,以后数据完全存储在 Github,可以自行迁移或者删改,自由度不言而喻。

Note:本人的 Jekyll 主题是 Hux,魔改较多,相对而言更加小众,如果是普通主题可以他处看看,外面铺子还是很多的。


许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。