What is fileset?
The fileset npm package allows you to find files in a directory that match a given set of glob patterns. It is useful for tasks such as file manipulation, batch processing, and automation scripts.
What are fileset's main functionalities?
Basic File Matching
This feature allows you to find all JavaScript files in a directory, excluding those in the node_modules directory. The code sample demonstrates how to use the fileset function to match files based on glob patterns.
const fileset = require('fileset');
fileset('**/*.js', 'node_modules/**', function(err, files) {
if (err) return console.error(err);
console.log(files);
});
Multiple Patterns
This feature allows you to match files based on multiple patterns. The code sample shows how to find all JavaScript and CSS files in a directory, excluding those in the node_modules directory.
const fileset = require('fileset');
fileset(['**/*.js', '**/*.css'], 'node_modules/**', function(err, files) {
if (err) return console.error(err);
console.log(files);
});
Excluding Patterns
This feature allows you to exclude files based on patterns. The code sample demonstrates how to find all files in a directory, excluding those in the node_modules and dist directories.
const fileset = require('fileset');
fileset('**/*', ['node_modules/**', 'dist/**'], function(err, files) {
if (err) return console.error(err);
console.log(files);
});
Other packages similar to fileset
glob
The glob package is a popular alternative for matching files using glob patterns. It offers similar functionality to fileset but is more widely used and has a larger community. It also provides synchronous and asynchronous methods for file matching.
fast-glob
The fast-glob package is another alternative that focuses on performance. It is faster than both fileset and glob, especially for large sets of files. It also supports advanced features like concurrency and custom matching options.
minimatch
The minimatch package is a lightweight alternative that provides basic glob pattern matching. It is often used as a dependency in other packages and is known for its simplicity and ease of use.
node-fileset
Exposes a basic wrapper on top of Glob / minimatch combo both written by @isaacs. Glob now use javascript instead of C++ bindings and make it usable in node 0.6.x and windows platforms.
Enable multiples patterns matching, and include exlude ability. This is bascially just sugar API syntax where you can specify a list of includes and optionnal exclude patterns. It works by setting up the necessary miniglob "fileset" and filtering out the results using minimatch.
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 an exclude match is found and filtered out from the fileset.
- end: Emitted when the matching is finished with all the matches found, optionnaly filterd by the exclude patterns.
callback
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
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, shoud you want to use them individually.
Check out the tests for more examples.
tests
just run npm test
why
mainly as 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, optionnaly allowing exclude patterns to filter out the results.
All the magic is happening in Glob and minimatch, check them out !