modular
v0.0.4
Published
Automatically turn a directory of files into an exported node module structure.
Downloads
18
Readme
Modular
Modular allows simple exportation of a module directory to a node module structure. Individual files are only required when the exported object's property is accessed.
Installation
% npm install -g auto-module
Usage
A require("modular")
returns a function that takes two optional arguments.
module.exports = require("modular")([src], [options]);
src
, if given, should be a string that is a path to a directory to turn into an Modular. If not given, the directory of the file that required Modular will be used.
options
, if given, should be an object with one, or more, of the following properties:
recursive
: Whether or not to recursively turn sub-directories into Modulars also. Default istrue
.keyFormatter
: A function to use to transform a filename into a property key. The default is to camel-case the file name by splitting the base filename (minus any extension) on whitespace or a hyphen, and then title case all words after first. i.e:"my-foo-function" => "myFooFunction" "My-Base-Class" => "MyBaseClass" "-my-other-class" => "MyOtherClass"
excludes
: An array of strings, or Regular Expressions, to use to exclude certain files. The exclude pattern will be applied to a file's basename.
Example
Given the following directory structure:
my-module/
index.js
foo.js
foo-bar/
Baz.js
buz.js
If the content of my-module/index.js
is the following:
module.exports = require("modular")();
Would produce the following module/object structure:
{
foo: {
// the exports of my-module/foo.js
},
fooBar: {
Baz: {
// the exports of my-module/Baz.js
},
buz: {
// the exports of my-module/buz.js
}
}
}
But, not really.
The actual property is not resolved (the underlying file required
) until it is accessed. So, really, when first required the exported object looks like this:
{
foo: [Getter],
fooBar: [Getter]
}
After foo
and fooBar
are accessed, it would look like this:
{
foo: {
// the exports of my-module/foo.js
},
fooBar: {
Baz: [Getter],
buz: [Getter]
}
}
And so on.