mrmlnc / fast-glob
- среда, 14 февраля 2018 г. в 03:16:44
🚀 Is a faster (1.5-10x for most cases) node-glob alternative.
Is a faster
node-globalternative.
['*', '!*.md']).!**/node_modules/**).fs.Stats for matched path if you wanted.If you want to thank me, or promote your Issue.
Sorry, but I have work and support for packages requires some time after work. I will be glad of your support and PR's.
$ npm install --save fast-glob
const fg = require('fast-glob');
fg(['src/**/*.js', '!src/**/*.spec.js']).then((entries) => console.log(entries));
fg.async(['src/**/*.js', '!src/**/*.spec.js']).then((entries) => console.log(entries));const fg = require('fast-glob');
const entries = fg.sync(['src/**/*.js', '!src/**/*.spec.js']);
console.log(entries);const fg = require('fast-glob');
const stream = fg.stream(['src/**/*.js', '!src/**/*.spec.js']);
const entries = [];
stream.on('data', (entry) => entries.push(entry));
stream.once('error', console.log);
stream.once('end', () => console.log(entries));Returns a Promise<Array> of matching entries.
string|string[]This package does not respect the order of patterns. First, all the negative patterns are applied, and only then the positive patterns.
ObjectSee options section for more detailed information.
Returns a Array of matching entries.
Returns a ReadableStream.
stringprocess.cwd()The current working directory in which to search.
number|booleantrueThe deep option can be set to true to traverse the entire directory structure, or it can be set to a number to only traverse that many levels deep.
string[][]An array of glob patterns to exclude matches.
booleanfalseAllow patterns to match filenames starting with a period (files & directories), even if the pattern does not explicitly have a period in that spot.
number|booleanfalseReturn fs.Stats with path property instead of file path.
booleantrueReturn only files.
booleanfalseReturn only directories.
booleantrueFollow symlinked directories when expanding ** patterns.
booleantruePrevent duplicate results.
booleanfalseAdd a / character to directory entries.
booleanfalseReturn absolute paths for matched entries.
booleanfalseDisable expansion of brace patterns ({a,b}, {1..3}).
booleanfalseDisable matching with globstars (**).
booleanfalseDisable extglob support (patterns like +(a|b)), so that extglobs are regarded as literal characters.
booleanfalseUse a case-insensitive regex for matching files.
booleanfalseAllow glob patterns without slashes to match a file path based on its basename. For example, a?b would match the path /xyz/123/acb, but not /xyz/acb/123.
FunctionnullAllows you to transform a path or fs.Stats object before sending to the array.
const fg = require('fast-glob');
const entries1 = fg.sync(['**/*.scss']);
const entries2 = fg.sync(['**/*.scss'], { transform: (entry) => '_' + entry });
console.log(entries1); // ['a.scss', 'b.scss']
console.log(entries2); // ['_a.scss', '_b.scss']If you are using TypeScript, you probably want to specify your own type of the returned array.
import * as fg from 'fast-glob';
interface IEntry {
path: string;
}
const entries: IEntry[] = fg.sync<IEntry>(['*.md'], {
transform: (entry) => typeof entry === 'string' ? { path: entry } : { path: entry.path }
// Will throw compilation error for non-IEntry types (boolean, for example)
});You can use a negative pattern like this: !**/node_modules or !**/node_modules/**. Also you can use ignore option. Just look at the example below.
If you don't want to read the second directory, you must write the following pattern: !**/second or !**/second/**.
fg.sync(['**/*.md', '!**/second']); // ['first/file.txt']
fg.sync(['**/*.md'], { ignore: '**/second/**' }); // ['first/file.txt']
⚠️ When you write!**/second/**/*it means that the directory will be read, but all the entries will not be included in the results.
You have to understand that if you write the pattern to exclude directories, then the directory will not be read under any circumstances.
node-glob?Not fully, because fast-glob does not implement all options of node-glob. See table below.
| node-glob | fast-glob |
|---|---|
cwd |
cwd |
root |
– |
dot |
dot |
nomount |
– |
mark |
markDirectories |
nosort |
– |
nounique |
unique |
nobrace |
nobrace |
noglobstar |
noglobstar |
noext |
noext |
nocase |
nocase |
matchBase |
matchbase |
nodir |
onlyFiles |
ignore |
ignore |
follow |
followSymlinkedDirectories |
realpath |
– |
absolute |
absolute |
Tech specs:
Server: Vultr Bare Metal
You can see results here for latest release.
fs.readdir().See the Releases section of our GitHub project for changelogs for each release version.
This software is released under the terms of the MIT license.