135 lines
3.5 KiB
Markdown
135 lines
3.5 KiB
Markdown
|
[![Build Status](https://travis-ci.org/aseemk/requireDir.svg?branch=master)](https://travis-ci.org/aseemk/requireDir)
|
|||
|
[![npm version](https://badge.fury.io/js/require-dir.svg)](http://badge.fury.io/js/require-dir)
|
|||
|
|
|||
|
# requireDir()
|
|||
|
|
|||
|
Node helper to `require()` directories. The directory's files are examined,
|
|||
|
and each one that can be `require()`'d is `require()`'d and returned as part
|
|||
|
of a hash from that file's basename to its exported contents.
|
|||
|
|
|||
|
## Example
|
|||
|
|
|||
|
Given this directory structure:
|
|||
|
|
|||
|
```
|
|||
|
dir
|
|||
|
+ a.js
|
|||
|
+ b.json
|
|||
|
+ c.coffee
|
|||
|
+ d.txt
|
|||
|
```
|
|||
|
|
|||
|
`requireDir('./dir')` will return the equivalent of:
|
|||
|
|
|||
|
```js
|
|||
|
{
|
|||
|
a: require('./dir/a.js'),
|
|||
|
b: require('./dir/b.json')
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
If CoffeeScript is registered via `require('coffee-script/register')`,
|
|||
|
`c.coffee` will also be returned. Any extension registered with node will work the same way without any additional configuration.
|
|||
|
|
|||
|
## Installation
|
|||
|
|
|||
|
```
|
|||
|
npm install require-dir
|
|||
|
```
|
|||
|
|
|||
|
Note that this package is *not* `requireDir` — turns out that's already
|
|||
|
[taken](https://github.com/JamesEggers1/node-requiredir)! ;)
|
|||
|
|
|||
|
## Usage
|
|||
|
|
|||
|
Basic usage that examines only directories' immediate files:
|
|||
|
|
|||
|
```js
|
|||
|
var requireDir = require('require-dir');
|
|||
|
var dir = requireDir('./path/to/dir');
|
|||
|
```
|
|||
|
|
|||
|
You can optionally customize the behavior by passing an extra options object:
|
|||
|
|
|||
|
```js
|
|||
|
var dir = requireDir('./path/to/dir', { recurse: true });
|
|||
|
```
|
|||
|
|
|||
|
## Options
|
|||
|
|
|||
|
`recurse`: Whether to recursively `require()` subdirectories too.
|
|||
|
(`node_modules` within subdirectories will be ignored.)
|
|||
|
Default is false.
|
|||
|
|
|||
|
`filter`: Apply a filter on the filename before require-ing. For example, ignoring files prefixed with `dev` in a production environment:
|
|||
|
|
|||
|
```js
|
|||
|
requireDir('./dir', {
|
|||
|
filter: function (fullPath) {
|
|||
|
return process.env.NODE_ENV !== 'production' && !fullPath.match(/$dev/);
|
|||
|
}
|
|||
|
})
|
|||
|
```
|
|||
|
|
|||
|
`mapKey`: Apply a transform to the module base name after require-ing. For example, uppercasing any module names:
|
|||
|
|
|||
|
```js
|
|||
|
requireDir('./dir', {
|
|||
|
mapKey: function (value, baseName) {
|
|||
|
return baseName.toUpperCase();
|
|||
|
}
|
|||
|
})
|
|||
|
```
|
|||
|
|
|||
|
`mapValue`: Apply a transform to the value after require-ing. For example, uppercasing any text exported:
|
|||
|
|
|||
|
```js
|
|||
|
requireDir('./dir', {
|
|||
|
mapValue: function (value, baseName) {
|
|||
|
return typeof value === 'string' ? value.toUpperCase() : value;
|
|||
|
}
|
|||
|
})
|
|||
|
```
|
|||
|
|
|||
|
`duplicates`: By default, if multiple files share the same basename, only the
|
|||
|
highest priority one is `require()`'d and returned. (Priority is determined by
|
|||
|
the order of `require.extensions` keys, with directories taking precedence
|
|||
|
over files if `recurse` is true.) Specifying this option `require()`'s all
|
|||
|
files and returns full filename keys in addition to basename keys.
|
|||
|
Default is false.
|
|||
|
|
|||
|
In the example above, if there were also an `a.json`, the behavior would
|
|||
|
be the same by default, but specifying `duplicates: true` would yield:
|
|||
|
|
|||
|
```js
|
|||
|
{
|
|||
|
a: require('./dir/a.js'),
|
|||
|
'a.js': require('./dir/a.js'),
|
|||
|
'a.json': require('./dir/a.json'),
|
|||
|
b: require('./dir/b.json'),
|
|||
|
'b.json': require('./dir/b.json')
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
`noCache`: Prevent file caching. Could be useful using gulp.watch or other watch requiring refreshed file content Default is false.
|
|||
|
|
|||
|
```js
|
|||
|
requireDir('./dir', { noCache: true })
|
|||
|
```
|
|||
|
|
|||
|
`extensions`: Array of extensions to look for instead of using `require.extensions`.
|
|||
|
|
|||
|
```js
|
|||
|
requireDir('./dir', { extensions: ['.js', '.json'] })
|
|||
|
```
|
|||
|
|
|||
|
## Tips
|
|||
|
|
|||
|
Make an `index.js` in a directory with this code to clean things up:
|
|||
|
|
|||
|
```js
|
|||
|
module.exports = require('require-dir')(); // defaults to '.'
|
|||
|
```
|
|||
|
|
|||
|
And don't worry, the calling file is always ignored to prevent infinite loops.
|