auto-exports

0.3.12 • Public • Published

auto-exports

creates a module.exports map for all modules in a directory

NPM

TL;DR

here's the gist of it, in a one-liner:

index.js
module.exports = require('auto-exports')();

installation

npm i auto-exports -S

usage

this module exports (no pun intended) a single function, which synchronously transforms all modules in a directory (except for index.js and index.node!) into a dictionary suited for module.exports. the keys in this dictionary are camel-cased module names, and the values hold the loaded modules.

this function accepts the modules directory path as the first argument, a list of module names to exclude as the second, and a module interceptor as the third. all arguments are optional.

if the directory path is omitted, it is auto-resolved to the path of the requiring module (same as passing __dirname).

the module exclusions list is an array of modules names that will be excluded from the resulted dictionary.

the module interceptor is a function that's called after each module has been loaded. it receives two arguments: the module name, and the loaded module, and may return the module after modifying it. useful if you want to add a method to each module, or wrap all modules with the same type of proxy, or to [insert your idea here].

examples

let's assume we have a directory with two modules; foo-foo.js, which exports an object, and bar-bar.js, which exports a function.

in that directory, we also have an additional index.js file, where we call autoExports().

just auto load all modules

index.js
const autoExports = require('auto-exports');
module.exports = autoExports(__dirname);
result
{
    fooFoo: [Object],
    barBar: [Function]
}

auto-magically load all modules!

index.js
// ...
module.exports = autoExports(); // look, mummy, no args!
result

same as before

exclude some modules

index.js
// ...
module.exports = autoExports(__dirname, ['foo-foo']);
result
{
    barBar: [Function]
}

modify each loaded module

index.js
// ...
module.exports = autoExports(__dirname, (moduleName, module) => {
    return new Proxy(module, {
        get (target, key) {
            return Reflect.get(target, key) || `${moduleName}'s got no ${key}`;
        }
    });
});
result
{
    fooFoo: [Proxy],
    barBar: [Proxy]
}

exclude some modules and modify each loaded module

index.js
// ...
module.exports = autoExports(__dirname, ['bar-bar'], (moduleName, module) => {
    return Object.defineProperty(module, 'wat', { value: moduleName });
});
result
{
    fooFoo: [Object]
}
// fooFoo.wat -> 'foo-foo'

gotchas

  • when requiring the auto-exported directory from within that directory, the resulted exports object structure is malformed. this happens due the cyclic dependency.

Package Sidebar

Install

npm i auto-exports

Weekly Downloads

136

Version

0.3.12

License

MIT

Last publish

Collaborators

  • eliranmal