捆绑node.js模块

时间:2013-03-26 13:19:01

标签: node.js module

我想将这些模块导入到我的项目中:

var ModuleA = require('./ModuleA.js'),
    ModuleB = require('./ModuleB.js'),
    ModuleC = require('./ModuleC.js'),
    ModuleD = require('./ModuleD.js');

现在,这很好用,但我想捆绑这些,而是​​调用一个处理所有这些'sub'modules 的模块,如下所示:

// app.js ----------------------------

var Module = require('./Module.js');


// Module.js -------------------------

var ModuleA = require('./ModuleA.js'),
    ModuleB = require('./ModuleB.js'),
    ModuleC = require('./ModuleC.js'),
    ModuleD = require('./ModuleD.js');


// ModuleA.js ------------------------

exports.method = function() { return true }

现在,我希望能够访问'sub'bundles'出口,如下:

ModuleA.method();

这可能吗?

2 个答案:

答案 0 :(得分:4)

试试这个:

// ModuleA.js
module.exports.method = function () { return true; }

// Module.js
module.exports.A = require('./ModuleA');
module.exports.B = require('./ModuleB');

// app.js
var myModule = require('./Module');
myModule.A.method();

如果您希望直接在ModuleA上调用myModule的方法,则需要在Modules.js文件中重新导出它们,如下所示:

// ModuleA.js
module.exports.method = function () { return true; }

// Module.js
module.exports.methodA = require('./ModuleA').method;
module.exports.methodB = require('./ModuleB').method;

// app.js
var myModule = require('./Module');
myModule.methodA();

这会解决您的问题吗?

或者,您可以使用node-require-all允许您一次导入多个文件并使用单个对象导出它们。一个例子可能是:

var modules = require('require-all')({
  dirname    : __dirname + '/modules',
  filter     : /(Module.+)\.js$/,
  excludeDirs: /^\.(git|svn)$/
});

之后,您有一个对象modules,其中包含单个模块作为属性:

modules.ModuleA.method();

(我没有测试过这段代码,但基本上它应该像这样工作。)

答案 1 :(得分:0)

在Module.js中,执行以下操作:

var ModuleA = require('./ModuleA.js'),
for (var exported in ModuleA) {
  exports[exported] = ModuleA[exported];
}

ModuleA导出的所有对象(函数等)现在也由Module导出。