2

我有这些模块要导入到我的项目中:

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

现在,这很好用,但我想将它们捆绑在一起,而是调用一个模块来处理加载所有这些“子”模块,如下所示:

// 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();

这可能吗?

4

2 回答 2

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直接调用 on的方法,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();

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

于 2013-03-26T13:29:05.260 回答
0

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

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

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

于 2013-03-26T15:24:11.337 回答