Ce face fs.glob
glob caută fișiere după un tipar, ca în terminal: * înseamnă orice nume dintr-un singur director, ** orice număr de subdirectoare, ? un singur caracter, iar {jpg,png} oricare dintre variante. Căutarea pornește din directorul curent sau din cwd.
Întoarce un iterator asincron, pe care îl parcurgi cu for await sau îl transformi în tablou cu Array.fromAsync. Căile sunt relative la cwd, iar ordinea nu este garantată, așa că sortează rezultatul când contează.
Opțiunea exclude scoate din rezultat căile care se potrivesc cu alte tipare (de exemplu ["node_modules/**"]) sau pentru care o funcție întoarce true. Funcția a fost adăugată în Node.js 22.0 și este stabilă din 24.0; înainte de ea se folosea pachetul glob din npm. Dacă vrei doar să verifici un șir față de un tipar, fără disc, există path.matchesGlob(cale, tipar).
Parametri
| Parametru | Descriere |
|---|---|
tipar |
Un tipar sau un tablou de tipare ("**/*.md", ["src/**/*.mjs", "*.json"]). |
cwd |
Directorul din care pornește căutarea. Implicit process.cwd(). |
exclude |
Tablou de tipare de exclus sau funcție (cale) => boolean. |
withFileTypes |
Întoarce obiecte Dirent în loc de căi. |
Ce returnează
Un iterator asincron de căi relative (șiruri) sau de obiecte Dirent.
Exemple
Exemplul 1: Toate fișierele Markdown din proiect
import { mkdir, writeFile, glob } from "node:fs/promises";
await mkdir("docs/ghiduri", { recursive: true });
await writeFile("README.md", "# Proiect");
await writeFile("docs/instalare.md", "");
await writeFile("docs/ghiduri/plati.md", "");
await writeFile("docs/sigla.png", "");
const markdown = await Array.fromAsync(glob("**/*.md"));
console.log(markdown.sort());
Rezultat
[ 'README.md', 'docs/ghiduri/plati.md', 'docs/instalare.md' ]
Exemplul 2: Mai multe extensii și excluderi
import { mkdir, writeFile, glob } from "node:fs/promises";
await mkdir("src/utilitare", { recursive: true });
await mkdir("node_modules/lodash", { recursive: true });
await writeFile("src/app.js", "");
await writeFile("src/utilitare/pret.js", "");
await writeFile("src/utilitare/pret.test.js", "");
await writeFile("src/stil.css", "");
await writeFile("node_modules/lodash/index.js", "");
const surse = [];
for await (const cale of glob("**/*.{js,css}", {
exclude: ["node_modules/**", "**/*.test.js"],
})) {
surse.push(cale);
}
console.log(surse.sort());
Rezultat
[ 'src/app.js', 'src/stil.css', 'src/utilitare/pret.js' ]
Exemplul 3: Căutare din alt director: cwd
import { mkdir, writeFile, glob } from "node:fs/promises";
import path from "node:path";
await mkdir("poze/2026", { recursive: true });
await writeFile("poze/2026/iasi.jpg", "");
await writeFile("poze/2026/cluj.png", "");
await writeFile("poze/2026/lista.txt", "");
const imagini = await Array.fromAsync(glob("**/*.{jpg,png}", { cwd: "poze" }));
console.log(imagini.sort());
console.log(path.matchesGlob("poze/2026/iasi.jpg", "poze/**/*.jpg"));
Rezultat
[ '2026/cluj.png', '2026/iasi.jpg' ]
true
Greșeli frecvente
- Uiți
await/for await:globnu întoarce un tablou, ci un iterator asincron. FoloseșteArray.fromAsync(glob(...))pentru tablou. - Scrii tipare cu
\\pe Windows. În tipare folosește întotdeauna/ca separator. - Cauți cu
**fără să excluzinode_modulesși căutarea parcurge zeci de mii de fișiere. Adaugăexclude: ["node_modules/**"]. - Încerci negarea cu
"!*.test.js"înexclude. Tiparele de negare nu sunt acceptate acolo; scrie direct ce vrei să excluzi.
Comenzi înrudite
fs.readdir: Listează conținutul unui director: numele fișierelor, opțional cu tipul lor (withFileTypes) și cu subdirectoarele (recursive).fs.stat / fs.access / existsSync: Află informații despre un fișier (tip, mărime, date), verifică dacă există și dacă poate fi citit sau scris.path.parse / path.format / path.sep: Desface o cale în bucăți (root, dir, base, name, ext) și o reface din bucăți; path.sep și path.delimiter dau separatorii sistemului.path.join: Lipește mai multe bucăți într-o singură cale, cu separatorul corect pentru sistemul de operare, și curăță ./ și ../.