Skip to content

Quickstart

Scansiona una directory per file corrispondenti a *.ts:

ts
import { Glob } from "bun";

const glob = new Glob("**/*.ts");

// Scansiona la directory di lavoro corrente e ciascuna delle sue sottodirectory ricorsivamente
for await (const file of glob.scan(".")) {
  console.log(file); // => "index.ts"
}

Corrispondi una stringa a un pattern glob:

ts
import { Glob } from "bun";

const glob = new Glob("*.ts");

glob.match("index.ts"); // => true
glob.match("index.js"); // => false

Glob è una classe che implementa la seguente interfaccia:

ts
class Glob {
  scan(root: string | ScanOptions): AsyncIterable<string>;
  scanSync(root: string | ScanOptions): Iterable<string>;

  match(path: string): boolean;
}

interface ScanOptions {
  /**
   * La directory root da cui iniziare la corrispondenza. Default `process.cwd()`
   */
  cwd?: string;

  /**
   * Consente ai pattern di corrispondere a voci che iniziano con un punto (`.`).
   *
   * @default false
   */
  dot?: boolean;

  /**
   * Restituisce il percorso assoluto per le voci.
   *
   * @default false
   */
  absolute?: boolean;

  /**
   * Indica se attraversare i discendenti delle directory di collegamenti simbolici.
   *
   * @default false
   */
  followSymlinks?: boolean;

  /**
   * Lancia un errore quando il collegamento simbolico è interrotto
   *
   * @default false
   */
  throwErrorOnBrokenSymlink?: boolean;

  /**
   * Restituisce solo file.
   *
   * @default true
   */
  onlyFiles?: boolean;
}

Pattern Glob Supportati

Bun supporta i seguenti pattern glob:

? - Corrisponde a qualsiasi singolo carattere

ts
const glob = new Glob("???.ts");
glob.match("foo.ts"); // => true
glob.match("foobar.ts"); // => false

* - Corrisponde a zero o più caratteri, eccetto i separatori di percorso (/ o \)

ts
const glob = new Glob("*.ts");
glob.match("index.ts"); // => true
glob.match("src/index.ts"); // => false

** - Corrisponde a qualsiasi numero di caratteri incluso /

ts
const glob = new Glob("**/*.ts");
glob.match("index.ts"); // => true
glob.match("src/index.ts"); // => true
glob.match("src/index.js"); // => false

[ab] - Corrisponde a uno dei caratteri contenuti nelle parentesi, così come gli intervalli di caratteri

ts
const glob = new Glob("ba[rz].ts");
glob.match("bar.ts"); // => true
glob.match("baz.ts"); // => true
glob.match("bat.ts"); // => false

Puoi usare intervalli di caratteri (es. [0-9], [a-z]) così come gli operatori di negazione ^ o ! per corrispondere a qualsiasi cosa eccetto i caratteri contenuti nelle parentesi graffe (es. [^ab], [!a-z])

ts
const glob = new Glob("ba[a-z][0-9][^4-9].ts");
glob.match("bar01.ts"); // => true
glob.match("baz83.ts"); // => true
glob.match("bat22.ts"); // => true
glob.match("bat24.ts"); // => false
glob.match("ba0a8.ts"); // => false

{a,b,c} - Corrisponde a uno dei pattern dati

ts
const glob = new Glob("{a,b,c}.ts");
glob.match("a.ts"); // => true
glob.match("b.ts"); // => true
glob.match("c.ts"); // => true
glob.match("d.ts"); // => false

Questi pattern di corrispondenza possono essere profondamente annidati (fino a 10 livelli) e contenere qualsiasi wildcard da sopra.

! - Nega il risultato all'inizio di un pattern

ts
const glob = new Glob("!index.ts");
glob.match("index.ts"); // => false
glob.match("foo.ts"); // => true

\ - Esegue l'escape di uno qualsiasi dei caratteri speciali sopra

ts
const glob = new Glob("\\!index.ts");
glob.match("!index.ts"); // => true
glob.match("index.ts"); // => false

Compatibilità con fs.glob() di Node.js

Bun implementa anche le funzioni fs.glob() di Node.js con funzionalità aggiuntive:

ts
import { glob, globSync, promises } from "node:fs";

// Array di pattern
const files = await promises.glob(["**/*.ts", "**/*.js"]);

// Pattern di esclusione
const filtered = await promises.glob("**/*", {
  exclude: ["node_modules/**", "*.test.*"],
});

Tutte e tre le funzioni (fs.glob(), fs.globSync(), fs.promises.glob()) supportano:

  • Array di pattern come primo argomento
  • Opzione exclude per filtrare i risultati

Bun a cura di www.bunjs.com.cn