Skip to content

Schnellstart

Ein Verzeichnis nach Dateien durchsuchen, die mit *.ts übereinstimmen:

ts
import { Glob } from "bun";

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

// Durchsucht das aktuelle Arbeitsverzeichnis und jedes seiner Unterverzeichnisse rekursiv
for await (const file of glob.scan(".")) {
  console.log(file); // => "index.ts"
}

Einen String mit einem Glob-Muster abgleichen:

ts
import { Glob } from "bun";

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

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

Glob ist eine Klasse, die die folgende Schnittstelle implementiert:

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

  match(path: string): boolean;
}

interface ScanOptions {
  /**
   * Das Stammverzeichnis, von dem der Abgleich beginnt. Standardmäßig `process.cwd()`
   */
  cwd?: string;

  /**
   * Erlaubt Mustern, Einträge zu übereinstimmen, die mit einem Punkt (`.`) beginnen.
   *
   * @default false
   */
  dot?: boolean;

  /**
   * Gibt den absoluten Pfad für Einträge zurück.
   *
   * @default false
   */
  absolute?: boolean;

  /**
   * Gibt an, ob Nachkommen von symbolischen Link-Verzeichnissen durchlaufen werden sollen.
   *
   * @default false
   */
  followSymlinks?: boolean;

  /**
   * Wirft einen Fehler, wenn ein symbolischer Link unterbrochen ist
   *
   * @default false
   */
  throwErrorOnBrokenSymlink?: boolean;

  /**
   * Gibt nur Dateien zurück.
   *
   * @default true
   */
  onlyFiles?: boolean;
}

Unterstützte Glob-Muster

Bun unterstützt die folgenden Glob-Muster:

? - Stimmt mit einem einzelnen Zeichen überein

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

* - Stimmt mit null oder mehr Zeichen überein, außer mit Pfadtrennzeichen (/ oder \)

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

** - Stimmt mit einer beliebigen Anzahl von Zeichen überein, einschließlich /

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

[ab] - Stimmt mit einem der in den Klammern enthaltenen Zeichen überein, sowie mit Zeichenbereichen

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

Sie können Zeichenbereiche (z.B. [0-9], [a-z]) sowie die Negationsoperatoren ^ oder ! verwenden, um alles zu übereinstimmen außer den in den Klammern enthaltenen Zeichen (z.B. [^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} - Stimmt mit einem der angegebenen Muster überein

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

Diese Muster können tief verschachtelt sein (bis zu 10 Ebenen) und beliebige der oben genannten Wildcards enthalten.

! - Negiert das Ergebnis am Anfang eines Musters

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

\ - Maskiert eines der oben genannten Sonderzeichen

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

Node.js fs.glob()-Kompatibilität

Bun implementiert auch Node.js' fs.glob()-Funktionen mit zusätzlichen Features:

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

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

// Muster ausschließen
const filtered = await promises.glob("**/*", {
  exclude: ["node_modules/**", "*.test.*"],
});

Alle drei Funktionen (fs.glob(), fs.globSync(), fs.promises.glob()) unterstützen:

  • Array von Mustern als erstes Argument
  • exclude-Option zum Filtern von Ergebnissen

Bun von www.bunjs.com.cn bearbeitet