xrequire
v0.4.0
Published
eXtended Require: Folder requires and index.js toolkit.
Downloads
24
Readme
XREQUIRE
XREQUIRE is your index.js
folder loader swiss army knife.
$ npm install xrequire --save
Obligatory feature checklist (and API documentation all in one):
- Implement your
index.js
in a single line:
require('xrequire')(module)
- Or the more common style found with other libs:
module.exports = require('xrequire')(__dirname)
- Post-process modules on the fly by passing a
map
function:
require('xrequire')(module, function(exports, name, basename) {
// hidden base class
function Base() { }
Base.prototype = new Object();
// inject base class and other shared dependencies
return exports(Base, require('underscore'), require('async'));
});
- Filters module by passing a
filter
function:
require('xrequire')(module,
{ filter:
function(name) {
return name[0] !== '_'; // modules with _ prefix should be hidden
}
}
);
- Or
reject
works too:
require('xrequire')(module,
{ reject:
function(name) {
return name[0] === '_'; // modules with _ prefix should be hidden
}
}
);
- Append (or prepend) a namespace-specific name to your classes without having long filenames:
// assume we have roles/admin.js roles/staff.js and roles/guest.js
// we'll get adminRole, staffRole and guestRole exports
require('xrequire')(module, { append: 'Role' });
- Transform your file names into ClassNames dasherized-name or even "Titleized Long Strings Keys" via an integrated pksunkara/inflect hook:
require('xrequire')(module, { inflect: 'classify' }); // or ...
require('xrequire')(module, { inflect: 'dasherize' }); // or ...
require('xrequire')(module, { inflect: 'titleize' }); // or ...
// other i.hooks works too.
- The last two options together provide some nice naming capability out of the box:
require('xrequire')(module, { inflect: 'classify', append: 'Role' })
// assume we have roles/admin.js roles/staff.js and roles/guest.js
// we'll get AdminRole, StaffRole and GuestRole all neat and clean :)
- Implemented in pure JS with 100% test coverage (yeah, there wasn't much to be tested anyway.)
$ make cover
OPTIONS
{ filter: null // function : return true to include only wanted modules
, reject: null // function : return true to reject only select modules
, map: null // function : transform module exports before re-exporting it
, prepend: '' // string : prepend to module names before exported
, append: '' // string : append to module names before exported
, inflect: '' // string : name of inflection method to use
, magic: true // boolean : set to false to prevent module.exports magic
}
DEVELOPMENT
Test xrequire
by running
$ make test
and generate coverage reports by running
$ make cover
Things to do:
- Subfolder requires.
- Support for folder requires without needing to implement
index.js
. - More inflection tests and validation.
- Direct name transform function.
LICENSE
BSD
SUPPORT
Just open a GitHub issue or ping me on twitter @chakrit