Top Related Projects
glob functionality for node.js
Highly optimized wildcard and glob matching library. Faster, drop-in replacement to minimatch and multimatch. Used by square, webpack, babel core, yarn, jest, ract-native, taro, bulma, browser-sync, stylelint, nyc, ava, and many others! Follow micromatch's author: https://github.com/jonschlinkert
:rocket: It's a very fast and efficient glob library for Node.js
Highly configurable logging utility
Quick Overview
Globby is a powerful Node.js library that provides fast and flexible file and directory matching using glob patterns. It extends the capabilities of the native glob
module with additional features and improved performance, making it easier to work with file systems in Node.js applications.
Pros
- Fast performance due to optimized algorithms and caching
- Supports advanced glob patterns and extended syntax
- Provides both synchronous and asynchronous APIs
- Integrates well with other popular Node.js libraries and frameworks
Cons
- Limited to Node.js environments, not suitable for browser-based applications
- May have a steeper learning curve for users unfamiliar with glob patterns
- Some advanced features might be overkill for simple use cases
Code Examples
- Basic file matching:
import globby from 'globby';
const paths = await globby('*.js');
console.log(paths);
- Multiple patterns and negation:
import globby from 'globby';
const paths = await globby(['**/*.js', '!node_modules/**']);
console.log(paths);
- Using options for more control:
import globby from 'globby';
const paths = await globby('**/*.txt', {
cwd: '/path/to/search',
dot: true,
gitignore: true
});
console.log(paths);
Getting Started
To use Globby in your Node.js project, follow these steps:
-
Install the package:
npm install globby
-
Import and use in your JavaScript file:
import globby from 'globby'; (async () => { const paths = await globby('**/*.js'); console.log(paths); })();
-
For CommonJS environments, use require instead:
const globby = require('globby'); (async () => { const paths = await globby('**/*.js'); console.log(paths); })();
Competitor Comparisons
glob functionality for node.js
Pros of node-glob
- More mature and established project with a longer history
- Provides a lower-level API for more fine-grained control
- Supports advanced features like
ignore
patterns andfollow
symlinks
Cons of node-glob
- Less user-friendly for simple use cases
- Requires more manual configuration for common scenarios
- Slower performance compared to globby in some cases
Code Comparison
node-glob:
const glob = require('glob');
glob('**/*.js', (err, files) => {
console.log(files);
});
globby:
const globby = require('globby');
(async () => {
const files = await globby('**/*.js');
console.log(files);
})();
Summary
node-glob is a more established and feature-rich library, offering greater control and advanced options. However, it can be more complex to use and may have slower performance in certain scenarios. globby, on the other hand, provides a more user-friendly API with better performance for common use cases, but may lack some of the advanced features found in node-glob.
Both libraries serve their purposes well, with node-glob being better suited for complex glob operations and fine-grained control, while globby excels in simplicity and ease of use for most common glob pattern matching scenarios.
Highly optimized wildcard and glob matching library. Faster, drop-in replacement to minimatch and multimatch. Used by square, webpack, babel core, yarn, jest, ract-native, taro, bulma, browser-sync, stylelint, nyc, ava, and many others! Follow micromatch's author: https://github.com/jonschlinkert
Pros of micromatch
- More focused on pattern matching, providing a wider range of matching options
- Faster performance for complex glob patterns
- Smaller package size, suitable for projects with limited dependencies
Cons of micromatch
- Less abstraction for file system operations
- Requires more manual configuration for certain use cases
- Limited built-in support for ignoring files (e.g., .gitignore)
Code Comparison
micromatch:
const micromatch = require('micromatch');
const files = ['foo.js', 'bar.txt', 'baz.js'];
const matches = micromatch(files, ['*.js']);
console.log(matches); // ['foo.js', 'baz.js']
globby:
const globby = require('globby');
(async () => {
const paths = await globby(['*.js']);
console.log(paths); // ['foo.js', 'baz.js']
})();
Key Differences
- micromatch focuses on pattern matching, while globby provides higher-level file system operations
- globby offers built-in Promise support and async/await compatibility
- micromatch requires more manual setup for file system operations, but provides finer control over matching
Use Cases
- Choose micromatch for projects requiring advanced pattern matching without file system operations
- Opt for globby when working with file systems and needing a higher-level abstraction
:rocket: It's a very fast and efficient glob library for Node.js
Pros of fast-glob
- Generally faster performance, especially for large file systems
- More flexible and customizable options for glob patterns
- Supports custom file system adapters for non-standard environments
Cons of fast-glob
- Less straightforward API compared to globby
- May require more configuration for simple use cases
- Fewer built-in convenience methods for common scenarios
Code Comparison
fast-glob:
const fg = require('fast-glob');
(async () => {
const entries = await fg(['**/*.js', '!**/node_modules/**'], { dot: true });
console.log(entries);
})();
globby:
const globby = require('globby');
(async () => {
const paths = await globby(['**/*.js', '!**/node_modules/**'], { dot: true });
console.log(paths);
})();
Both libraries provide similar functionality for glob pattern matching, but fast-glob offers more granular control over the matching process at the cost of a slightly more complex API. globby, on the other hand, provides a simpler interface that may be more suitable for straightforward use cases. The choice between the two depends on the specific requirements of your project, such as performance needs, customization options, and ease of use.
Highly configurable logging utility
Pros of Signale
- Provides a more comprehensive logging system with customizable loggers and themes
- Offers interactive prompts and spinners for enhanced user interaction
- Supports custom timers for performance tracking
Cons of Signale
- More focused on logging and output formatting, less versatile for file system operations
- May have a steeper learning curve due to its more extensive feature set
- Potentially higher overhead for simple logging tasks
Code Comparison
Globby (file matching):
const globby = require('globby');
(async () => {
const paths = await globby(['**/*.js', '!node_modules']);
console.log(paths);
})();
Signale (logging):
const { Signale } = require('signale');
const options = {
types: {
error: { badge: '!!', color: 'red' },
success: { badge: '✔', color: 'green' }
}
};
const signale = new Signale(options);
signale.success('Operation successful');
signale.error('Operation failed');
While both libraries serve different primary purposes, they can complement each other in a Node.js project. Globby excels at file matching and pattern searching, while Signale provides advanced logging and user interaction capabilities. The choice between them depends on the specific needs of your project, whether it's file system operations or enhanced logging and output formatting.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
globby
User-friendly glob matching
Based on fast-glob
but adds a bunch of useful features.
Features
- Promise API
- Multiple patterns
- Negated patterns:
['foo*', '!foobar']
- Expands directories:
foo
âfoo/**/*
- Supports
.gitignore
and similar ignore config files - Supports
URL
ascwd
Install
npm install globby
Usage
âââ unicorn
âââ cake
âââ rainbow
import {globby} from 'globby';
const paths = await globby(['*', '!cake']);
console.log(paths);
//=> ['unicorn', 'rainbow']
API
Note that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use path.posix.join()
instead of path.join()
.
globby(patterns, options?)
Returns a Promise<string[]>
of matching paths.
patterns
Type: string | string[]
See supported minimatch
patterns.
options
Type: object
See the fast-glob
options in addition to the ones below.
expandDirectories
Type: boolean | string[] | 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:
import {globby} from 'globby';
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 onlyFiles: false
.
gitignore
Type: boolean
Default: false
Respect ignore patterns in .gitignore
files that apply to the globbed files.
ignoreFiles
Type: string | string[]
Default: undefined
Glob patterns to look for ignore files, which are then used to ignore globbed files.
This is a more generic form of the gitignore
option, allowing you to find ignore files with a compatible syntax. For instance, this works with Babel's .babelignore
, Prettier's .prettierignore
, or ESLint's .eslintignore
files.
globbySync(patterns, options?)
Returns string[]
of matching paths.
globbyStream(patterns, options?)
Returns a stream.Readable
of matching paths.
For example, loop over glob matches in a for await...of
loop like this:
import {globbyStream} from 'globby';
for await (const path of globbyStream('*.tmp')) {
console.log(path);
}
convertPathToPattern(path)
Convert a path to a pattern. Learn more.
generateGlobTasks(patterns, options?)
Returns an Promise<object[]>
in the format {patterns: string[], options: Object}
, which can be passed as arguments to fast-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.
generateGlobTasksSync(patterns, options?)
Returns an object[]
in the format {patterns: string[], options: Object}
, which can be passed as arguments to fast-glob
. This is useful for other globbing-related packages.
Takes the same arguments as generateGlobTasks
.
isDynamicPattern(patterns, options?)
Returns a boolean
of whether there are any special glob characters in the patterns
.
Note that the options affect the results.
This function is backed by fast-glob
.
isGitIgnored(options?)
Returns a Promise<(path: URL | string) => boolean>
indicating whether a given path is ignored via a .gitignore
file.
Takes cwd?: URL | string
as options.
import {isGitIgnored} from 'globby';
const isIgnored = await isGitIgnored();
console.log(isIgnored('some/file'));
isGitIgnoredSync(options?)
Returns a (path: URL | string) => boolean
indicating whether a given path is ignored via a .gitignore
file.
Takes cwd?: URL | string
as options.
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
Top Related Projects
glob functionality for node.js
Highly optimized wildcard and glob matching library. Faster, drop-in replacement to minimatch and multimatch. Used by square, webpack, babel core, yarn, jest, ract-native, taro, bulma, browser-sync, stylelint, nyc, ava, and many others! Follow micromatch's author: https://github.com/jonschlinkert
:rocket: It's a very fast and efficient glob library for Node.js
Highly configurable logging utility
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot