|
|
|
|
# node-fileset [](http://travis-ci.org/mklabs/node-fileset)
|
|
|
|
|
|
|
|
|
|
Exposes a basic wrapper on top of
|
|
|
|
|
[Glob](https://github.com/isaacs/node-glob) /
|
|
|
|
|
[minimatch](https://github.com/isaacs/minimatch) combo both written by
|
|
|
|
|
@isaacs. Glob now uses JavaScript instead of C++ bindings which makes it
|
|
|
|
|
usable in Node.js 0.6.x and Windows platforms.
|
|
|
|
|
|
|
|
|
|
[](https://nodei.co/npm/fileset/)
|
|
|
|
|
|
|
|
|
|
Adds multiples patterns matching and exlude ability. This is
|
|
|
|
|
basically just a sugar API syntax where you can specify a list of includes
|
|
|
|
|
and optional exclude patterns. It works by setting up the necessary
|
|
|
|
|
miniglob "fileset" and filtering out the results using minimatch.
|
|
|
|
|
|
|
|
|
|
*[Changelog](https://github.com/mklabs/node-fileset/blob/master/CHANGELOG.md#changelog)*
|
|
|
|
|
|
|
|
|
|
## Install
|
|
|
|
|
|
|
|
|
|
npm install fileset
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
|
|
Can be used with callback or emitter style.
|
|
|
|
|
|
|
|
|
|
* **include**: list of glob patterns `foo/**/*.js *.md src/lib/**/*`
|
|
|
|
|
* **exclude**: *optional* list of glob patterns to filter include
|
|
|
|
|
results `foo/**/*.js *.md`
|
|
|
|
|
* **callback**: *optional* function that gets called with an error if
|
|
|
|
|
something wrong happend, otherwise null with an array of results
|
|
|
|
|
|
|
|
|
|
The callback is optional since the fileset method return an instance of
|
|
|
|
|
EventEmitter which emit different events you might use:
|
|
|
|
|
|
|
|
|
|
* *match*: Every time a match is found, miniglob emits this event with
|
|
|
|
|
the pattern.
|
|
|
|
|
* *include*: Emitted each time an include match is found.
|
|
|
|
|
* *exclude*: Emitted each time an exclude match is found and filtered
|
|
|
|
|
out from the fileset.
|
|
|
|
|
* *end*: Emitted when the matching is finished with all the matches
|
|
|
|
|
found, optionally filtered by the exclude patterns.
|
|
|
|
|
|
|
|
|
|
#### Callback
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
var fileset = require('fileset');
|
|
|
|
|
|
|
|
|
|
fileset('**/*.js', '**.min.js', function(err, files) {
|
|
|
|
|
if (err) return console.error(err);
|
|
|
|
|
|
|
|
|
|
console.log('Files: ', files.length);
|
|
|
|
|
console.log(files);
|
|
|
|
|
});
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### Event emitter
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
var fileset = require('fileset');
|
|
|
|
|
|
|
|
|
|
fileset('**.coffee README.md *.json Cakefile **.js', 'node_modules/**')
|
|
|
|
|
.on('match', console.log.bind(console, 'error'))
|
|
|
|
|
.on('include', console.log.bind(console, 'includes'))
|
|
|
|
|
.on('exclude', console.log.bind(console, 'excludes'))
|
|
|
|
|
.on('end', console.log.bind(console, 'end'));
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`fileset` returns an instance of EventEmitter, with an `includes` property
|
|
|
|
|
which is the array of Fileset objects (inheriting from
|
|
|
|
|
`miniglob.Miniglob`) that were used during the mathing process, should
|
|
|
|
|
you want to use them individually.
|
|
|
|
|
|
|
|
|
|
Check out the
|
|
|
|
|
[tests](https://github.com/mklabs/node-fileset/tree/master/tests) for
|
|
|
|
|
more examples.
|
|
|
|
|
|
|
|
|
|
## Sync usage
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
var results = fileset.sync('*.md *.js', 'CHANGELOG.md node_modules/**/*.md node_modules/**/*.js');
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The behavior should remain the same, although it lacks the last `options` arguments to pass to internal `glob` and `minimatch` dependencies.
|
|
|
|
|
|
|
|
|
|
## Tests
|
|
|
|
|
|
|
|
|
|
Run `npm test`
|
|
|
|
|
|
|
|
|
|
## Why
|
|
|
|
|
|
|
|
|
|
Mainly for a build tool with cake files, to provide me an easy way to get
|
|
|
|
|
a list of files by either using glob or path patterns, optionally
|
|
|
|
|
allowing exclude patterns to filter out the results.
|
|
|
|
|
|
|
|
|
|
All the magic is happening in
|
|
|
|
|
[Glob](https://github.com/isaacs/node-glob) and
|
|
|
|
|
[minimatch](https://github.com/isaacs/minimatch). Check them out!
|