2013-06-27 69 views
0

我很難找到一個關於爲nodejs應用程序編寫插件的好教程(不適用於nodejs本身!)。爲nodejs應用程序編寫插件教程?

我想要做的是,對於某些nodejs應用程序,我想用我寫的幾個js文件擴展它的功能。

例如,我使用karma runner來運行JS單元測試,但現有的記者並沒有很好地滿足我們的日誌需求。所以我寫了自己的記者,並把它放在一個單獨的js文件中,例如myreporter.js。到現在使用它,我必須添加myreporter.js成因果報應代碼的文件夾,並添加一些行這樣到reporter.js業報

exports.myreporter = require('./reporters/myreporter'); 

這很好地工作在我的機器上,然而,這可能是CI服務器的一個問題。我不想在我們自己的項目中包含所有的業力代碼。我想在服務器上安裝公共回購的業力,只在我們的項目中包含myreporter.js,這樣我們就不必爲每個構建安裝修改的業力。我只想安裝myreporter.js作爲構建業務的插件。

我不確定這是否足夠清楚。所以我需要的是爲業力編寫插件,或爲任何現有的nodejs應用程序編寫插件。我仍然可以像以前一樣使用該應用程序,而我可以使用該插件帶來的新功能。

我看到this page對等依賴關係。這是否意味着,如果我爲myreporter.js的package.json文件添加了peerdependency或karma,一旦我安裝了myreporter包並運行業力,業力會接受新的記者?

感謝您對這個長問題的任何幫助。

更新:

嘗試peerdependency,似乎人緣0.8.6不接我的插件了。看起來從0.9業力開始使用di,我想這是當它開始支持插件。但是,0.9.3仍然不是一個穩定的版本。

回答

2

自己找到答案。如果應用程序本身沒有明確支持插件,那麼可能沒有辦法爲通用nodejs應用程序編寫插件。

但是,更改應用程序以支持插件非常容易。唯一要做的就是使用強大的「require」來獲取插件模塊的名稱。例如,在噶0.9.4(現在最新版本),它具有plugin.js它加載的所有插件模塊:

​​

而且所有的自定義插件可以在conf.js文件中像這樣進行設置:

... 
plugins: ['you-own-plugin'], 
... 

要編寫自己的插件,看看the Karma github,有很多的插件噶的例子。

不幸的是,Karma(0.8.6)的最新穩定版本不支持外部插件。我不得不修改預處理器.js記者。js我自己支持自定義預處理器和記者。我提供了下面的變化,這是簡單的變化,但不是真的推薦。

//preprocessor.js line 26 
processor = exports[processorName] || require(processorName.toLowerCase()) 

//reporter.js line 48 
var Reporter = exports[helper.ucFirst(name) + (config.colors ? 'Color' : '')] || require(name.toLowerCase());