Skip to content

Démarrage rapide

Scanner un répertoire pour les fichiers correspondant à *.ts :

ts
import { Glob } from "bun";

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

// Scanne le répertoire de travail actuel et chacun de ses sous-répertoires récursivement
for await (const file of glob.scan(".")) {
  console.log(file); // => "index.ts"
}

Faire correspondre une chaîne avec un motif glob :

ts
import { Glob } from "bun";

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

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

Glob est une classe qui implémente l'interface suivante :

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

  match(path: string): boolean;
}

interface ScanOptions {
  /**
   * Le répertoire racine à partir duquel commencer la correspondance. Par défaut `process.cwd()`
   */
  cwd?: string;

  /**
   * Permet aux motifs de correspondre aux entrées commençant par un point (`.`).
   *
   * @default false
   */
  dot?: boolean;

  /**
   * Retourne le chemin absolu pour les entrées.
   *
   * @default false
   */
  absolute?: boolean;

  /**
   * Indique s'il faut traverser les descendants des répertoires de liens symboliques.
   *
   * @default false
   */
  followSymlinks?: boolean;

  /**
   * Lance une erreur lorsqu'un lien symbolique est cassé
   *
   * @default false
   */
  throwErrorOnBrokenSymlink?: boolean;

  /**
   * Retourne uniquement les fichiers.
   *
   * @default true
   */
  onlyFiles?: boolean;
}

Motifs Glob pris en charge

Bun prend en charge les motifs glob suivants :

? - Correspond à n'importe quel caractère unique

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

* - Correspond à zéro ou plusieurs caractères, sauf les séparateurs de chemin (/ ou \)

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

** - Correspond à n'importe quel nombre de caractères y compris /

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

[ab] - Correspond à l'un des caractères contenus dans les crochets, ainsi que les plages de caractères

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

Vous pouvez utiliser des plages de caractères (par exemple [0-9], [a-z]) ainsi que les opérateurs de négation ^ ou ! pour correspondre à tout sauf aux caractères contenus dans les accolades (par exemple [^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} - Correspond à l'un des motifs donnés

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

Ces motifs de correspondance peuvent être profondément imbriqués (jusqu'à 10 niveaux) et contenir n'importe lequel des caractères génériques ci-dessus.

! - Négue le résultat au début d'un motif

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

\ - Échappe l'un des caractères spéciaux ci-dessus

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

Compatibilité avec fs.glob() de Node.js

Bun implémente également les fonctions fs.glob() de Node.js avec des fonctionnalités supplémentaires :

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

// Tableau de motifs
const files = await promises.glob(["**/*.ts", "**/*.js"]);

// Motifs d'exclusion
const filtered = await promises.glob("**/*", {
  exclude: ["node_modules/**", "*.test.*"],
});

Les trois fonctions (fs.glob(), fs.globSync(), fs.promises.glob()) prennent en charge :

  • Un tableau de motifs comme premier argument
  • L'option exclude pour filtrer les résultats

Bun édité par www.bunjs.com.cn