require-directory
Recursively iterates over specified directory, require()
'ing each file, and returning a nested hash structure containing those modules.
Follow me (@troygoode) on Twitter!
How To Use
npm)
Installation (via$ npm install require-directory
Usage
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 = ;moduleexports = ;
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 = ; // snip app;app;app;app;
The routes
variable above is the equivalent of this:
var routes = home: auth: login: logout: register: ;
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 = ;moduleexports = ;
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 = ;var 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 = whitelist = /onlyinclude.js$/ hash = ;
var requireDirectory = { if/onlyinclude.js$/ return true; // don't include else return false; // go ahead and include } hash = ;
Blacklisting
Blacklisting (either via RegExp or function) allows you to specify that all but certain files should be loaded.
var requireDirectory = blacklist = /dontinclude\.js$/ hash = ;
var requireDirectory = { if/dontinclude\.js$/ return false; // don't include else return true; // go ahead and include } hash = ;
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 = { console; // will be called for every module that is loaded } hash = ;
The visitor can also transform the objects by returning a value:
var requireDirectory = { return ; } hash = ;
Renaming Keys
var requireDirectory = { return name; } hash = ;
No Recursion
var requireDirectory = hash = ;
Run Unit Tests
$ npm run lint$ npm test