98 lines
3.2 KiB
Markdown
98 lines
3.2 KiB
Markdown
|
# node-fileset [![Build Status](https://secure.travis-ci.org/mklabs/node-fileset.png)](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.
|
|||
|
|
|||
|
[![NPM](https://nodei.co/npm/fileset.png?downloads=true&stars=true)](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!
|