Skip to content

添加 Gitalk 添加评论功能

注册 GitHub Application

1、首先,你需要在 github 上注册一个 GitHub Application ,填写参考如下:

提示

  • Application name 填写你的应用名称,例如:docsify

  • Homepage URL 填写你的网站地址,例如:https://docsify.js.org

  • Authorization callback URL 填写你的网站地址,例如:https://docsify.js.org

 register 注册图

2、创建一个 Client secret 来验证作为 API 的应用程序

注意

创建后先复制新创建的 Client secret,刷新页面就看不到了

创建 secret 图片

找到 Client IDClient secret 保存下来,后面会用到。

配置 Gitalk

1、安装 gitalk 插件

sh
pnpm add -D gitalk

2、在 docs/.vitepress/theme 目录下创建 index.ts 文件,替换默认的 layout 组件

ts
import DefaultTheme from 'vitepress/theme'
import Layout from './components/Layout.vue'

export default {
  extends: DefaultTheme,
  Layout
}

3、在 docs/.vitepress/components 目录下创建 Layout.vue 文件,添加 gitalk 评论组件

vue
<script setup lang="ts">
import DefaultTheme from 'vitepress/theme'

import Gitalk from './Gitalk.vue'
</script>

<template>
  <!-- eslint-disable-next-line vue/component-name-in-template-casing -->
  <DefaultTheme.Layout>
    <template #doc-after>
      <Gitalk />
    </template>
  </DefaultTheme.Layout>
</template>

4、在 docs/.vitepress/components 目录下创建 Gitalk.vue 文件,添加 gitalk 评论组件

vue
<script lang="ts" setup>
import Gitalk from 'gitalk'
import { useRoute } from 'vitepress'
import 'gitalk/dist/gitalk.css'

const route = useRoute()

function initGitalk() {
  // 切换页面时,刷新评论组件
  const gitTalk = new Gitalk({
    // 客户端 ID
    clientID: 'xxx',
    // 客户端密钥
    clientSecret: 'xxx',
    // 存储评论的仓库
    repo: 'mhaibaraai.github.io',
    // 仓库的拥有者
    owner: 'mhaibaraai',
    // 存储评论的仓库的管理员
    admin: ['mhaibaraai'],
    // 每个页面的唯一标识
    id: route.path,
    // 是否开启专注模式
    distractionFreeMode: false,
    // 是否手动创建 issue
    createIssueManually: true,
  })

  gitTalk.render('gitalk-container')
}

onMounted(() => {
  initGitalk()
})

watch(
  () => route.path,
  initGitalk,
)
</script>

<template>
  <div id="gitalk-container" />
</template>

提示

本地调试时,可以先把 Authorization callback URL 改为本地调试地址,例如: http://localhost:3000

错误:未找到相关的 Issues 进行评论?

先登录 GitHub,然后在 GitHub 仓库的 Issues 里面创建一个新的 Issue,然后刷新页面就可以看到评论了。

发现评论重复?

尝试在 Gitalk 组件上添加 :key="Date.now()" 属性,强制刷新组件。

vue
<Gitalk :key="Date.now()" />

基于 MIT 许可发布