首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为你的VuePress博客添加GitTalk评论

为你的VuePress博客添加GitTalk评论

作者头像
小皮咖
发布2019-11-05 16:19:43
1.3K0
发布2019-11-05 16:19:43
举报
文章被收录于专栏:小皮咖小皮咖

背景

突发奇想,想让自己的 《前端进阶小书》拥有评论功能,于是开始了探索之路

实现之路

1. 创建一个 OAuth Apps

Github 设置中找到 Settings / Developer settings / OAuth Apps / new OAuth Apps, 创建一个应用

创建成功有 Client IDClient Secret ,保存下来,后面我们会用到。

2. 创建评论组件

Vuepress 默认 .vuepress / components 文件夹下的组件会全局注册, 因此我们创建一个 comment 组件

gittalk.css 请点击 这里

<template>
  <div class="gitalk-container">
    <div id="gitalk-container"></div>
  </div>
</template>
<script>
export default {
  name: 'comment',
  data() {
    return {};
  },
  mounted() {
    let body = document.querySelector('.gitalk-container');
    let script = document.createElement('script');
    script.src = 'https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js';
    body.appendChild(script);
    script.onload = () => {
      const commentConfig = {
        clientID: '你的clientID',
        clientSecret: '你的clientSecret',
        repo: '你的仓库名称',
        owner: '你的用户名',
        // 这里接受一个数组,可以添加多个管理员,可以是你自己
        admin: ['管理用户名'],
        // id 用于当前页面的唯一标识,一般来讲 pathname 足够了,
        // 但是如果你的 pathname 超过 50 个字符,GitHub 将不会成功创建 issue,此情况可以考虑给每个页面生成 hash 值的方法.
        id: location.pathname,
        distractionFreeMode: false,
      };
      const gitalk = new Gitalk(commentConfig);
      gitalk.render('gitalk-container');
    };
  },
};
</script>
<style>
@import '../css/gittalk.css';
</style>
 
复制代码

3. 使用评论组件

理论上,我们在每个 markdown 文件里直接加入这个组件即可,但是每次都添加有点麻烦,还是让 node 来帮我们吧

根目录创建 build 文件夹, 创建三个文件 addComponents.js, delComponents.js, findMarkdown.js, 分别代码如下:

// addComponents.js
const fs = require("fs");
const findMarkdown = require("./findMarkdown");
const rootDir = "./docs";

findMarkdown(rootDir, writeComponents);

function writeComponents(dir) {
    if (!/README/.test(dir)) {
        fs.appendFile(dir, `\n \n <comment/> \n `, err => {
            if (err) throw err;
            console.log(`add components to ${dir}`);
        });
    }
}
复制代码
// delComponents.js
const fs = require("fs");
const findMarkdown = require("./findMarkdown");
const rootDir = "./docs";

findMarkdown(rootDir, delComponents);

function delComponents(dir) {
    fs.readFile(dir, "utf-8", (err, content) => {
        if (err) throw err;

        fs.writeFile(
            dir,
            content.replace(/\n \n <comment\/> \n /g, ""),
            err => {
                if (err) throw err;
                console.log(`del components from ${dir}`);
            }
        );
    });
}
复制代码
// findMarkdown.js
const fs = require("fs");

function findMarkdown(dir, callback) {
    fs.readdir(dir, function(err, files) {
        if (err) throw err;
        files.forEach(fileName => {
            let innerDir = `${dir}/${fileName}`;
            if (fileName.indexOf(".") !== 0) {
                fs.stat(innerDir, function(err, stat) {
                    if (stat.isDirectory()) {
                        findMarkdown(innerDir, callback);
                    } else {
                        // 跳过readme 文件,当然你也可以自行修改
                        if (/\.md$/.test(fileName) && !/README/.test(fileName))
                            callback(innerDir);
                    }
                });
            }
        });
    });
}
module.exports = findMarkdown;
复制代码

修改 package.jsonscripts, 先为每个 md 文件添加组件,然后打包,最后再一一删除 markdown 中的 comment 组件

"build": "node ./builds/addComponents.js && vuepress build docs && node ./builds/delComponents.js",

OK,大功告成,将你的项目推上 github 试试看吧

效果可以看我的项目 《前端进阶小书》 查看。 That is all!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年10月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 实现之路
    • 1. 创建一个 OAuth Apps
      • 2. 创建评论组件
        • 3. 使用评论组件
        相关产品与服务
        访问管理
        访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档