globby
User-friendly glob matching
Based on glob
, but adds a bunch of useful features and a nicer API.
Features
- Promise API
- Multiple patterns
- Negated patterns:
['foo*', '!foobar']
- Expands directories:
dir
→dir/**/*
- Supports
.gitignore
Install
$ npm install globby
Usage
├── unicorn
├── cake
└── rainbow
const globby = require('globby');
(async () => {
const paths = await globby(['*', '!cake']);
console.log(paths);
//=> ['unicorn', 'rainbow']
})();
API
globby(patterns, [options])
Returns a Promise<Array>
of matching paths.
patterns
Type: string
Array
See supported minimatch
patterns.
options
Type: Object
See the node-glob
options in addition to the ones below.
One difference is that nodir
is true
by default here.
expandDirectories
Type: boolean
Array
Object
Default: true
If set to true
, globby
will automatically glob directories for you. If you define an Array
it will only glob files that matches the patterns inside the Array
. You can also define an Object
with files
and extensions
like below:
(async () => {
const paths = await globby('images', {
expandDirectories: {
files: ['cat', 'unicorn', '*.jpg'],
extensions: ['png']
}
});
console.log(paths);
//=> ['cat.png', 'unicorn.png', 'cow.jpg', 'rainbow.jpg']
})();
Note that if you set this option to false
, you won't get back matched directories unless you set nodir: false
.
gitignore
Type: boolean
Default: false
Respect ignore patterns in .gitignore
files that apply to the globbed files.
gitignoreName
Type: string
Default: .gitignore
The file name to look for .gitignore
file when applying ignore patterns to the globbed files.
globby.sync(patterns, [options])
Returns an Array
of matching paths.
globby.generateGlobTasks(patterns, [options])
Returns an Array<Object>
in the format {pattern: string, opts: Object}
, which can be passed as arguments to node-glob
. This is useful for other globbing-related packages.
Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.
globby.hasMagic(patterns, [options])
Returns a boolean
of whether there are any special glob characters in the patterns
.
Note that the options affect the results. If noext: true
is set, then +(a|b)
will not be considered a magic pattern. If the pattern has a brace expansion, like a/{b/c,x/y}
, then that is considered magical, unless nobrace: true
is set.
globby.gitignore([options])
Returns a Promise<(path: string) => boolean>
indicating wether a given path is ignored via a .gitignore
file.
Takes cwd?: string
and ignore?: string[]
as options. .gitignore
files matched by the ignore config are not
used for the resulting filter function.
const {gitignore} = require('globby');
(async () => {
const isIgnored = await gitignore();
console.log(isIgnored('some/file'));
})();
globby.gitignore.sync([options])
Returns a (path: string) => boolean
indicating wether a given path is ignored via a .gitignore
file.
Takes the same options as globby.gitignore
.
Globbing patterns
Just a quick overview.
-
*
matches any number of characters, but not/
-
?
matches a single character, but not/
-
**
matches any number of characters, including/
, as long as it's the only thing in a path part -
{}
allows for a comma-separated list of "or" expressions -
!
at the beginning of a pattern will negate the match
Various patterns and expected matches.
Related
- multimatch - Match against a list instead of the filesystem
- matcher - Simple wildcard matching
- del - Delete files and directories
- make-dir - Make a directory and its parents if needed
License
MIT © Sindre Sorhus