2013-06-27 26 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());