2014-12-25 23 views
0

[我是一個總是新手到Javascript,所以慢慢來。]插件的Javascript模式?

我正在研究node.js中的應用程序,它將有一個插件列表。每個「插件」應該是一個函數(或2),可以接受一個字符串並對其進行操作。應用程序應該依次調用每個插件並將其傳遞給字符串。根據結果​​,它可能會調用該插件等的另一個功能...

什麼是最好的方式來設計這在Javascript中?我不介意修改應用程序以添加每個插件作爲其開發,但寧願避免這樣做很多。

現在我只是想爲每個模塊創建一個模塊,然後在主應用程序中「需要」它並調用函數,但這似乎有一些原因(a)我需要更改父應用程序安靜每一個新插件,(b)沒有接口,我可以強制執行插件。我有點希望有某種契約,我可以強制插件尊重。

回答

1

你可以list the plugin directory,並要求每個文件。如果每個文件都將一個函數添加到現有對象(例如,myapp.plugins),那麼您可以僅使用forEach該對象並調用每個函數。你不能在代碼中執行一個契約,而不需要執行奇怪的事情,比如調用一個AST解析器。你最好在插件上進行單元測試,以確保它們獨立工作。

編輯:

你能否詳細說明這部分了一下:「如果每個文件增加了一個功能,現有的對象(比如,myapp.plugins),你可以的foreach對象,調用各功能。「?

var invokePlugins = function() { 
    var args = arguments.slice(0); 
    myapp.plugins.forEach(function(plugin) { 
    plugin.apply(plugin, args); 
    }); 
} 
invokePlugins("this", "gets", "passed to", "each plugin"); 

你的架構還不清楚,所以這僅僅是一個你可以做非常粗略的想法。

+0

你可以詳細說明一下這個部分:「如果每個文件都向現有的對象(比如myapp.plugins)添加一個函數,那麼你可以只是forEach該對象並調用每個函數。 – Mike

+0

非常感謝編輯。 – Mike