path.basename / dirname / extname în Node.js

Extrage dintr-o cale numele fișierului (basename), directorul (dirname) sau extensia (extname).

Sintaxă
import path from "node:path";
path.basename(cale[, sufix])
path.dirname(cale)
path.extname(cale)

Ce face path.basename / dirname / extname

path.basename întoarce ultima parte a căii, de obicei numele fișierului. Dacă dai și un sufix (de exemplu ".pdf"), îl elimină de la final, așa că obții numele fără extensie.

path.dirname întoarce tot ce este înainte de ultima parte, adică directorul. path.extname întoarce extensia, de la ultimul punct, cu tot cu punct (".jpg"), sau un șir gol dacă numele nu are extensie.

Funcțiile lucrează doar cu textul căii, nu verifică discul. Pe Windows folosesc implicit și \ ca separator; exemplele au rulat pe Linux/macOS.

Parametri

Parametru Descriere
cale Calea analizată.
sufix Opțional, la basename: textul eliminat de la sfârșitul numelui, dacă se potrivește exact (literele mari contează).

Ce returnează

Un șir: numele, directorul sau extensia.

Exemple

Exemplul 1: Cele trei funcții pe aceeași cale

import path from "node:path";

const cale = "/home/ana/documente/factura-octombrie.pdf";

console.log(path.basename(cale));
console.log(path.basename(cale, ".pdf"));
console.log(path.dirname(cale));
console.log(path.extname(cale));

Rezultat

factura-octombrie.pdf
factura-octombrie
/home/ana/documente
.pdf

Exemplul 2: Cazuri speciale pentru extname

import path from "node:path";

for (const nume of ["arhiva.tar.gz", "README", ".env", "poza.", "Raport.PDF"]) {
  console.log(nume.padEnd(14), JSON.stringify(path.extname(nume)));
}

Rezultat

arhiva.tar.gz  ".gz"
README         ""
.env           ""
poza.          "."
Raport.PDF     ".PDF"

Exemplul 3: Fișiere grupate după extensie

import path from "node:path";

const fisiere = ["poze/iasi.jpg", "cv-ana.pdf", "poze/cluj.JPG", "note.txt", "contract.pdf"];
const grupe = {};

for (const fisier of fisiere) {
  const ext = path.extname(fisier).toLowerCase() || "(fără)";
  (grupe[ext] ??= []).push(path.basename(fisier));
}
console.log(grupe);

Rezultat

{
  '.jpg': [ 'iasi.jpg', 'cluj.JPG' ],
  '.pdf': [ 'cv-ana.pdf', 'contract.pdf' ],
  '.txt': [ 'note.txt' ]
}

Greșeli frecvente

  • Compari extensii fără să ții cont de litere mari: .JPG ≠ .jpg. Folosește .toLowerCase().
  • Aștepți ".tar.gz" de la extname("arhiva.tar.gz"): primești doar ".gz", extensia de după ultimul punct.
  • Folosești split("/").pop() în loc de basename: nu merge pe căile Windows și nici când calea se termină cu /.

Comenzi înrudite

  • 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 ../.
  • url.fileURLToPath / pathToFileURL: Transformă un URL file:// (cum este import.meta.url) în cale obișnuită și o cale în URL file://.
  • fs.glob: Găsește fișierele care se potrivesc cu un tipar, de exemplu „**/*.js” sau „poze/*.{jpg,png}”.