編寫一個簡單的NodeBB插件

要寫 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目錄

在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按鈕娇未,最右邊一個圖標:

點擊Admin按鈕:最右邊一個圖標

點擊PLUGIN按鈕:


點擊PLUGIN按鈕下拉列表 的 install plugin

通過npm i 安裝新寫的插件后,這個頁面就會有該插件星虹,如圖零抬,點擊ACTIVATE激活插件:

激活nodebb-plugin-post-comments
nodebb-plugin-post-comments插件已激活

好了,現(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ù)溶诞。

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸯檬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子很澄,更是在濱河造成了極大的恐慌京闰,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甩苛,死亡現(xiàn)場離奇詭異蹂楣,居然都是意外死亡,警方通過查閱死者的電腦和手機讯蒲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門痊土,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人墨林,你說我怎么就攤上這事赁酝。” “怎么了旭等?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵酌呆,是天一觀的道長。 經(jīng)常有香客問我搔耕,道長隙袁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮菩收,結(jié)果婚禮上梨睁,老公的妹妹穿的比我還像新娘。我一直安慰自己娜饵,他們只是感情好坡贺,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箱舞,像睡著了一般遍坟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晴股,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天政鼠,我揣著相機與錄音,去河邊找鬼队魏。 笑死公般,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的胡桨。 我是一名探鬼主播官帘,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昧谊!你這毒婦竟也來了刽虹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤呢诬,失蹤者是張志新(化名)和其女友劉穎涌哲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尚镰,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡阀圾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狗唉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片初烘。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖分俯,靈堂內(nèi)的尸體忽然破棺而出肾筐,到底是詐尸還是另有隱情,我是刑警寧澤缸剪,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布吗铐,位于F島的核電站,受9級特大地震影響杏节,放射性物質(zhì)發(fā)生泄漏唬渗。R本人自食惡果不足惜讥此,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谣妻。 院中可真熱鬧,春花似錦卒稳、人聲如沸蹋半。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽减江。三九已至,卻和暖如春捻爷,著一層夾襖步出監(jiān)牢的瞬間辈灼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工也榄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巡莹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓甜紫,卻偏偏與公主長得像降宅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子囚霸,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容