Skip to content

Repository files navigation

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!

NPM

build status

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:

varrequireDirectory=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:

varroutes=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:

varroutes={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):

varrequireDirectory=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:

varrequireDirectory=require('require-directory');varroutes=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.

varrequireDirectory=require('require-directory'),whitelist=/onlyinclude.js$/,hash=requireDirectory(module,{include: whitelist});
varrequireDirectory=require('require-directory'),check=function(path){if(/onlyinclude.js$/.test(path)){returntrue;// go ahead and include}else{returnfalse;// don't 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.

varrequireDirectory=require('require-directory'),blacklist=/dontinclude\.js$/,hash=requireDirectory(module,{exclude: blacklist});
varrequireDirectory=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.

varrequireDirectory=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:

varrequireDirectory=require('require-directory'),visitor=function(obj){returnobj(newDate());},hash=requireDirectory(module,{visit: visitor});

Renaming Keys

varrequireDirectory=require('require-directory'),renamer=function(name){returnname.toUpperCase();},hash=requireDirectory(module,{rename: renamer});

No Recursion

varrequireDirectory=require('require-directory'),hash=requireDirectory(module,{recurse: false});

Run Unit Tests

$ npm run lint
$ npm test

License

MIT License

Author

Troy Goode (troygoode@gmail.com)

About

Recursively iterates over specified directory, requiring each file, and returning a nested hash structure containing those libraries.

Resources

Stars

409 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages