Convert Figma logo to code with AI

sindresorhus logoglobby

User-friendly glob matching

2,514
130
2,514
37

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

8,911

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

  1. Basic file matching:
import globby from 'globby';

const paths = await globby('*.js');
console.log(paths);
  1. Multiple patterns and negation:
import globby from 'globby';

const paths = await globby(['**/*.js', '!node_modules/**']);
console.log(paths);
  1. 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:

  1. Install the package:

    npm install globby
    
  2. Import and use in your JavaScript file:

    import globby from 'globby';
    
    (async () => {
      const paths = await globby('**/*.js');
      console.log(paths);
    })();
    
  3. 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 and follow 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.

8,911

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

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 as cwd

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

NPM DownloadsLast 30 Days