I have these modules I'd like to import into my project:
var ModuleA = require('./ModuleA.js'),
ModuleB = require('./ModuleB.js'),
ModuleC = require('./ModuleC.js'),
ModuleD = require('./ModuleD.js');
Now, this works great, but I'd like to bundle these and instead call one module that handles loading all these 'sub'modules, like so:
// 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 }
Now, I'd like to be able to access the 'sub'bundles' exports, like so:
ModuleA.method();
Is this possible?
Try this:
// 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();
If you wish to call the method of ModuleA directly on myModule you need to re-export them in the Modules.js file like this:
// 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();
Does this solve your issue?
Alternatively you might use node-require-all that allows you to import multiple files at once and export them using a single object. An example might be:
var modules = require('require-all')({
dirname : __dirname + '/modules',
filter : /(Module.+)\.js$/,
excludeDirs: /^\.(git|svn)$/
});
Afterwards, you have an object modules which contains the single modules as properties:
modules.ModuleA.method();
(I have not tested this code, but basically it should work like this.)
In Module.js, do something like this:
var ModuleA = require('./ModuleA.js'),
for (var exported in ModuleA) {
exports[exported] = ModuleA[exported];
}
All objects (functions, etc) that were exported by ModuleA are now exported by Module too.