A common pattern in node.js is to include an index file which creates a hash of the files in its current directory. Given a directory structure like so:
app.js
routes/
index.js
home.js
auth/
login.js
logout.js
register.js
routes/index.js uses require-directory to build the hash (rather than doing so manually) like so:
var requireDirectory =require('require-directory');module.exports=requireDirectory(module);
app.js references routes/index.js like any other module, but it now has a hash/tree of the exports from the ./routes/ directory:
var routes =require('./routes');// snipapp.get('/',routes.home);app.get('/register',routes.auth.register);app.get('/login',routes.auth.login);app.get('/logout',routes.auth.logout);
The routes variable above is the equivalent of this:
Note that routes.index will be undefined as you would hope.
Specifying Another Directory
You can specify which directory you want to build a tree of (if it isn't the current directory for whatever reason) by passing it as the second parameter. Not specifying the path (requireDirectory(module)) is the equivelant of requireDirectory(module, __dirname):
var requireDirectory =require('require-directory');module.exports=requireDirectory(module,'./some/subdirectory');
For example, in the example in the Usage section we could have avoided creating routes/index.js and instead changed the first lines of app.js to:
var requireDirectory =require('require-directory');var routes =requireDirectory(module,'./routes');
Options
You can pass an options hash to require-directory as the 2nd parameter (or 3rd if you're passing the path to another directory as the 2nd parameter already). Here are the available options:
Whitelisting
Whitelisting (either via RegExp or function) allows you to specify that only certain files be loaded.
var requireDirectory =require('require-directory'), whitelist = /onlyinclude.js$/, hash =requireDirectory(module, {include: whitelist});
var requireDirectory =require('require-directory'),check=function(path){if(/onlyinclude.js$/.test(path)){returntrue; // don't include }else{returnfalse; // go ahead and include } }, hash =requireDirectory(module, {include: check});
Blacklisting
Blacklisting (either via RegExp or function) allows you to specify that all but certain files should be loaded.
var requireDirectory =require('require-directory'), blacklist = /dontinclude\.js$/, hash =requireDirectory(module, {exclude: blacklist});
var requireDirectory =require('require-directory'),check=function(path){if(/dontinclude\.js$/.test(path)){returnfalse; // don't include }else{returntrue; // go ahead and include } }, hash =requireDirectory(module, {exclude: check});
Visiting Objects As They're Loaded
require-directory takes a function as the visit option that will be called for each module that is added to module.exports.
var requireDirectory =require('require-directory'),visitor=function(obj) {console.log(obj); // will be called for every module that is loaded }, hash =requireDirectory(module, {visit: visitor});
The visitor can also transform the objects by returning a value:
var requireDirectory =require('require-directory'),visitor=function(obj) {returnobj(newDate()); }, hash =requireDirectory(module, {visit: visitor});
Renaming Keys
var requireDirectory =require('require-directory'),renamer=function(name) {returnname.toUpperCase(); }, hash =requireDirectory(module, {rename: renamer});
No Recursion
var requireDirectory =require('require-directory'), hash =requireDirectory(module, {recurse:false});