| # 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! |