为你的VuePress博客添加GitTalk评论
时间:2022-07-26
本文章向大家介绍为你的VuePress博客添加GitTalk评论,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
背景
突发奇想,想让自己的 《前端进阶小书》拥有评论功能,于是开始了探索之路
实现之路
1. 创建一个 OAuth Apps
在 Github 设置中找到 Settings / Developer settings / OAuth Apps / new OAuth Apps
, 创建一个应用
创建成功有 Client ID 和 Client 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 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 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.json
的 scripts, 先为每个 md 文件添加组件,然后打包,最后再一一删除 markdown 中的 comment 组件
"build": "node ./builds/addComponents.js && vuepress build docs && node ./builds/delComponents.js",
OK,大功告成,将你的项目推上 github 试试看吧
效果可以看我的项目 《前端进阶小书》 查看。 That is all!
- Day4下午解题报告
- linux下 Error running javac compiler
- 讨厌算法的程序员 1 - 插入排序
- Linux下使用ssh密钥实现无交互备份
- [编程经验] Python中的continue和break语句
- 洛谷 P3386 【模板】二分图匹配 Dinic版
- [编程经验] 拉勾网爬虫数据的后续处理
- Linux下使用rsync实现文件备份
- 【干货】基于TensorFlow卷积神经网络的短期股票预测
- [编程经验] 基于bs4的拉勾网AI相关工作爬虫实现
- [编程经验] 链家23个全国主要城市的现房数据分析
- [编程经验] Python中的modlue和packages的区别
- Day5上午解题报告
- [编程经验] Pandas中比较好用的几个方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- vim的几种模式mode和按键映射map
- PHP parent 的注意点
- 不停服务调试(debug)线上Rsyslog
- 使用ulimit 命令、/etc/security/limits.conf、proc 调整系统参数
- 解决jupyter notebook matplotlib绘图中文乱码问题
- 【动手学深度学习笔记】之过拟合与欠拟合实例
- 【数学建模】之Matlab实现BP神经网络
- 【动手学深度学习笔记】之PyTorch实现多层感知机
- 【动手学深度学习笔记】之线性回归实现
- 【动手学深度学习笔记】之多层感知机(MLP)
- 【动手学深度学习笔记】之线性回归
- 【动手学深度学习笔记】之PyTorch实现softmax回归
- 三分钟解决Fashion-MNIST无法下载的问题
- 【动手学深度学习笔记】之实现softmax回归模型
- python实现简单爬虫功能