.. | ||
.jshintrc | ||
.npmignore | ||
.travis.yml | ||
index.js | ||
LICENSE | ||
package.json | ||
README.markdown |
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
Installation (via npm)
$ 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 = require('require-directory');
.exports = requireDirectory(module); 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');
// snip
.get('/', routes.home);
app.get('/register', routes.auth.register);
app.get('/login', routes.auth.login);
app.get('/logout', routes.auth.logout); app
The routes
variable above is the equivalent of this:
var routes = {
home: require('routes/home.js'),
auth: {
login: require('routes/auth/login.js'),
logout: require('routes/auth/logout.js'),
register: require('routes/auth/register.js')
}; }
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');
.exports = requireDirectory(module, './some/subdirectory'); module
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'),
= /onlyinclude.js$/,
whitelist = requireDirectory(module, {include: whitelist}); hash
var requireDirectory = require('require-directory'),
= function(path){
check if(/onlyinclude.js$/.test(path)){
return true; // don't include
else{
}return false; // go ahead and include
},
}= requireDirectory(module, {include: check}); hash
Blacklisting
Blacklisting (either via RegExp or function) allows you to specify that all but certain files should be loaded.
var requireDirectory = require('require-directory'),
= /dontinclude\.js$/,
blacklist = requireDirectory(module, {exclude: blacklist}); hash
var requireDirectory = require('require-directory'),
= function(path){
check if(/dontinclude\.js$/.test(path)){
return false; // don't include
else{
}return true; // go ahead and include
},
}= requireDirectory(module, {exclude: check}); 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 = require('require-directory'),
= function(obj) {
visitor console.log(obj); // will be called for every module that is loaded
,
}= requireDirectory(module, {visit: visitor}); hash
The visitor can also transform the objects by returning a value:
var requireDirectory = require('require-directory'),
= function(obj) {
visitor return obj(new Date());
,
}= requireDirectory(module, {visit: visitor}); hash
Renaming Keys
var requireDirectory = require('require-directory'),
= function(name) {
renamer return name.toUpperCase();
,
}= requireDirectory(module, {rename: renamer}); hash
No Recursion
var requireDirectory = require('require-directory'),
= requireDirectory(module, {recurse: false}); hash
Run Unit Tests
$ npm run lint
$ npm test