要寫 NodeBB 插件,棒極了摘仅!在這之前,你需要知道一些東西问畅。
和 WordPress 類似娃属,NodeBB 的插件搭建在 NodeBB 的鉤子系統(tǒng)上。鉤子系統(tǒng)护姆,通過可控制的方式矾端,把 NodeBB 的部分功能開放給插件開發(fā)者,允許插件更改內(nèi)容卵皂,或者觸發(fā)確定的行為秩铆。
過濾器、動作
有兩種類型的鉤子:過濾器* 和 執(zhí)行器渐裂。*
過濾器 作用于內(nèi)容豺旬。當內(nèi)容在 NodeBB 中傳遞時,你可以進行修改柒凉。例如族阅,可以用過濾器修改帖子內(nèi)容,比如把帖子中出現(xiàn)的所有“蘋果”更改為“橙子”膝捞。類似地坦刀,可以用過濾器美化內(nèi)容(比如代碼過濾器),或者移除粗口(粗口過濾器)蔬咬。
執(zhí)行器 會在 NodeBB 中特定的位置執(zhí)行鲤遥。在特定動作觸發(fā)后 做 些事情。例如林艘,執(zhí)行器可以用來盖奈,在用戶發(fā)帖時,通知管理員狐援。其他的用法包括分析記錄钢坦,或者在新用戶注冊后自動發(fā)送歡迎的消息。
當你編寫插件時啥酱,先確認你需要位置的鉤子是否存在爹凹。如果不存在,提交一個申請镶殷,然后我們會在下個 NodeBB 版本中加入這個的鉤子禾酱。
好了,我們先來寫一個簡答的插件:
首先在NodeBB項目根目錄下,新建一個寫我們的插件的文件夾/plugins
在plugins目錄下新建一個nodebb-plugin-post-comments
(一個nodebb插件的命名規(guī)范必須是:以“nodebb-plugin-
”開頭)
配置
每一個插件包含一個配置文件颤陶,文件名為plugin.json
,如下所示:
在plugins/nodebb-plugin-post-comments/plugin.json
新建一個配置文件
{
"id": "nodebb-plugin-post-comments",
"name": "new a plugin for comment of post",
"description": "NodeBB Plugin that allows users to mention other users by prepending an '@' sign to their username",
"url": "http://www.baidu.com", #這里一般是該插件所在的github地址颗管,由于我這是本地寫的插件,所以地址可以隨便寫
"library": "./library.js", #這里寫的是入口文件的路勁指郁,相對當前目錄
"hooks": [
{ "hook": "filter:teasers.get", "method": "addScripts" }
],
"nbbpm": {
{ "compatibility": "^0.7.0" }
}
}
library
屬性是庫相對插件包目錄的路徑忙上。NodeBB 會自動加載庫(如果插件處于激活狀態(tài))。
hooks
屬性是一個數(shù)組闲坎,包含一組對象疫粥,告訴 NodeBB 你 插件使用的鉤子,以及當調(diào)用鉤子時腰懂,庫中使用的方法梗逮。每個對象包含下面的屬性 (星號標記的屬性是必需的):
-
hook
, NodeBB 鉤子的名稱 -
method
, 插件中調(diào)用的方法 -
priority
, 最終調(diào)用方法時,相對的優(yōu)先級 (默認: 10)
nbbpm
屬性是一個對象绣溜,包含 NodeBB 包管理器的信息慷彤。
-
compatibility
指定了插件兼容的 NodeBB 版本。
你插件的核心是庫文件library.js
怖喻,當您的插件激活時底哗,NodeBB 會自動引用。
你在庫中編寫的每個方法都有確定的參數(shù)個數(shù)锚沸,取決于怎樣調(diào)用:
- 過濾器發(fā)送單個參數(shù)給你的方法跋选,異步方法也可以接受回調(diào)。
- 執(zhí)行器發(fā)送一些參數(shù)(具體個數(shù)取決于鉤子的實現(xiàn))哗蜈。這些參數(shù)在:doc: 鉤子列表 <hooks>的文檔中列出前标。
庫方法示例
在plugins/nodebb-plugin-post-comments/
下新建 library.js
內(nèi)容如下:
var comment = {
addScripts:function(){
console.log("我是一個新插件");
}
};
module.exports = comment;
如果我們要寫個方法,用來監(jiān)聽 action:post.save
鉤子距潘,我們應(yīng)該添加下面的行到 plugin.json
文件的 hooks
部分:
{ "hook": "action:post.save", "method": "myMethod" }
我們的庫應(yīng)該這樣寫:
var MyPlugin = {
myMethod: function(postData) {
// 在這里處理 postData
}
};
package.json
在plugins/nodebb-plugin-post-comments/
下新建 package.json
(這個里面的內(nèi)容可以從本地已有插件中的package.json中復(fù)制炼列,然后在其中改一下插件的名字就可以了),內(nèi)容太多這里就不讓了音比。
在nodebb中的install.js
中加入新寫的插件俭尖,如下:
在nodebb中的最外面的package.json
中加入新寫的插件:
但是這里要注意的一個問題就是:里面寫的插件都是一個插件的版本,但是這是自己寫的本地插件洞翩,版本就這樣寫:`“file:插件的路勁(相對本package.json的路勁)”
安裝插件
絕大多數(shù)情況下稽犁,你的插件應(yīng)該發(fā)布在 npm 上,然后你的包名一定以“nodebb-plugin-”
開頭菱农。這樣可以讓用戶缭付,通過運行npm install
把插件直接安裝到他們的實例中柿估。
當通過 npm 安裝時循未,你的插件 必須 以 “nodebb-plugin-”
開頭,否則 NodeBB 會找不到它。
然后在nodebb的根目錄上執(zhí)行npm i
安裝插件出錯
解決辦法:直接將nodebb-plugin-post-comments插件復(fù)制后放到node_modules根目錄下
測試
運行 NodeBB 的開發(fā)模式:
項目根目錄下執(zhí)行:./nodebb dev
這可以打印出插件的調(diào)試日志的妖,你可以查看到绣檬,已加載的插件,插件注冊的鉤子嫂粟。
在管理員面板中激活你的插件
點擊nodebb首頁面的Admin按鈕娇未,最右邊一個圖標:
點擊PLUGIN按鈕:
通過npm i 安裝新寫的插件后,這個頁面就會有該插件星虹,如圖零抬,點擊ACTIVATE激活插件:
好了,現(xiàn)在新寫的插件就可以試試了宽涌,重新啟動nodebb服務(wù)器平夜,刷新頁面(一定要刷新頁面),就會看到庫文件library.js
中寫的監(jiān)聽鉤子的函數(shù)中的console.log(“內(nèi)容”)卸亮,就會在終端輸出來忽妒。
小結(jié):
鉤子的觸發(fā)時機:
在初始化時就出發(fā)(頁面刷新后)
filter:post.parse
filter:teasers.get
在你想要使用哪一個鉤子的時候,一定要看一下兼贸,代碼中是否有觸發(fā)該鉤子的firhook段直,firhook觸發(fā)鉤子,firhook的毀掉函數(shù)給庫函數(shù)library.js
中監(jiān)聽鉤子的方法傳遞參數(shù)溶诞。