README.md
require-glob
Requires multiple modules using glob patterns and combines them into a nested object. Supports exclusions.
Install
$ npm install --save require-glob
Usage
┣━ unicorn.js
┣━ cake.js
┗━ rainbow/
┣━ red-orange.js
┣━ _yellow_green.js
┗━ BluePurple.js
var requireGlob = require('require-glob');
requireGlob(['**/*.js', '!cake.js']).then(function (modules) {
console.log(modules);
// {
// unicorn: [Object object],
// rainbow: {
// redOrange: [Object object],
// _yellow_green: [Object object],
// BluePurple: [Object object]
// }
// }
});
API
requireGlob(patterns [, options]): Promise
requireGlob.sync(patterns [, options]): Object
patterns
Type: {String|Array.<String>}
See supported minimatch
glob patterns.
options
Type: {Object=}
All options are inherited from globby
plus those listed below.
Options
bustCache
Type: {Boolean}
(default: false
)
Whether to force the reload of modules by deleting them from the cache. Useful inside watch tasks.
cwd
Type: {String}
(default: __dirname
)
The current working directory in which to search. Defaults to the __dirname
of the requiring module so relative paths work as you would expect.
requireGlob('./sibling/dir/**/*.js').then(function (modules) { ... });
requireGlob('../../some/cousin/dir/**/*.js').then(function (modules) { ... });
mapper
Type: {Function(filePath, i, filePaths) : file}
The mapper is reponsible for requiring the globbed modules. The default mapper returns an object containing path information and the result of requiring the module.
// the glob result
[
'./unicorn.js',
'./rainbow/red-orange.js',
'./rainbow/_yellow_green.js',
'./rainbow/BluePurple.js',
]
// is mapped to
[
{
cwd: '/home/jdoe/my-module',
path: '/home/jdoe/my-module/unicorn.js',
shortPath: 'unicorn.js',
exports: require('./unicorn')
},
{
cwd: '/home/jdoe/my-module',
path: '/home/jdoe/my-module/rainbow/red-orange.js',
shortPath: 'rainbow/red-orange.js',
exports: require('./rainbow/red-orange')
},
{
cwd: '/home/jdoe/my-module',
path: '/home/jdoe/my-module/rainbow/_yellow_green.js',
shortPath: 'rainbow/_yellow_green.js',
exports: require('./rainbow/_yellow_green')
},
{
cwd: '/home/jdoe/my-module',
path: '/home/jdoe/my-module/rainbow/BluePurple.js',
shortPath: 'rainbow/BluePurple.js',
exports: require('./rainbow/BluePurple')
}
]
reducer
Type: {Function(results, file, i, files) : results}
The reducer is responsible for generating the final object structure. The default reducer expects an array as produced by the default mapper and turns it into a nested object. The object structure is determined by the keygen
.
// mapper example is reduced to
{
unicorn: require('./unicorn.js'),
rainbow: {
redOrange: require('./rainbow/red-orange.js'),
_yellow_green: require('./rainbow/_yellow_green.js'),
BluePurple: require('./rainbow/BluePurple.js'),
}
}
keygen
Type: {Function(file) : String|Array.<String>}
The default reducer uses this function to generate a unique key for every module. The default keygen converts hyphenated and dot-separated sections of directory names and the file name to camelCase
. File extensions are ignored. Path separators determine object nesting.
// given the mapped object
{
shortPath: 'fooBar/bar-baz/_bat.qux.js',
exports: require('./fooBar/bar-baz/_bat.qux.js')
}
// the keygen will produce
[
'fooBar',
'barBaz',
'_batQux'
]
// which the reducer will use to construct
{
fooBar: {
barBaz: {
_batQux: require('./fooBar/bar-baz/_bat.qux.js')
}
}
}
Contribute
Standards for this project, including tests, code coverage, and semantics are enforced with a build tool. Pull requests must include passing tests with 100% code coverage and no linting errors.
Test
$ npm test
© 2016 Shannon Moeller me@shannonmoeller.com
Licensed under MIT