前言
有新的需求,但是又没有对应的插件,所以临时简单学了一下,怎么快速上手编写一个gitbook插件。
过程
创建npm项目
在node_modules
目录下创建该目录
# 必须要 gitbook-plugin 开头
mkdir gitbook-plugin-d4test
cd gitbook-plugin-d4test
npm init -y
运行后,会在当前目录生成package.json
文件
修改package.json
修改内容如下:
{
"name": "gitbook-plugin-d4test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"engines": {
"gitbook": ">1.x.x"
},
"keywords": [],
"author": "",
"license": "ISC"
}
创建index.js相关
创建index.js
,并写入内容
module.exports = {
// 给gitbook注入自定义的css和js文件
website: {
assets: './assets',
js: [
'plugins.js'
],
css: [
''
]
},
// Map of hooks 一些钩子函数
hooks: {},
// Map of new blocks
blocks: {},
// Map of new filters
filters: {}
};
根据上述的内容,创建assets
目录,目录中创建plugins.js
,目录结构如下
.
├── assets
│ └── plugins.js
├── index.js
└── package.json
编写plugins.js
内容如下,目的是为了在<head>
标签中添加一个Google广告的JS,其中的广告Token通过配置文件传入。
这里的
plugins.js
就是核心内容,指定了如何操作
require(["gitbook"], function(gitbook) {
// start事件
gitbook.events.bind("start", function(e, pluginConfig) {
// 拿到配置文件
var config = pluginConfig.d4test || {};
console.log(pluginConfig);
// token不为空
if (!config.token) {
throw "Need to option 'token' for Google ads plugin";
}
// 获取<head>标签
const head = document.getElementsByTagName('head')[0];
// 创建<script>元素
let script = document.createElement('script');
script.async = true;
script.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=" + config.token;
script.crossOrigin = "anonymous";
// 将<script>元素添加到<head>标签中
head.appendChild(script);
});
// page.change事件
gitbook.events.bind("page.change", function() {
console.log("test");
});
});
至此插件就完成了。
引入插件
在book.js
中引入插件,并配置即可
{
"title" : "d4m1ts 知识库",
"author" : "d4m1ts",
"description" : "个人的部分知识技能,倾向于使用知识库的方式进行总结回顾自己",
"theme-default": {
"showLevel": true
},
"plugins": [
"d4test"
],
"pluginsConfig": {
"d4test": {
"token": "ca-pub-9261110029983076"
}
}
}
引入后gitbook serve
即可
测试效果
每个网站的head标签中都加入了对应的JS脚本。