Ce face path.join
path.join unește părțile primite cu separatorul sistemului: / pe Linux și macOS, \ pe Windows. Apoi normalizează rezultatul: elimină / dublate, segmentele . și rezolvă .. (urcă un director).
Folosește path.join în loc să lipești șiruri cu + sau cu șabloane: codul rămâne corect pe orice sistem și nu mai depinde de faptul că o parte se termină sau nu cu /.
join nu face calea absolută și nu verifică dacă ea există pe disc: lucrează doar cu text. Pentru o cale absolută folosește path.resolve. Exemplele de mai jos au rulat pe Linux/macOS; pe Windows rezultatele au \ în loc de /.
Parametri
| Parametru | Descriere |
|---|---|
parte1, parte2, ... |
Bucățile căii, ca șiruri. Părțile goale sunt ignorate. |
Ce returnează
Calea rezultată, normalizată. Dacă rezultatul ar fi gol, întoarce ".".
Exemple
Exemplul 1: Construirea căilor
import path from "node:path";
console.log(path.join("documente", "facturi", "2026.pdf"));
console.log(path.join("documente/", "/facturi/", "2026.pdf"));
console.log(path.join("src", "pagini", "..", "index.html"));
console.log(path.join("./poze", "./iasi.jpg"));
console.log(path.join(""));
Rezultat
documente/facturi/2026.pdf
documente/facturi/2026.pdf
src/index.html
poze/iasi.jpg
.
Exemplul 2: Fișiere lângă script
import.meta.dirname este directorul scriptului; lipit cu join dă calea către un fișier de lângă el, indiferent din ce director rulezi node.
import path from "node:path";
import { mkdir, writeFile, readFile } from "node:fs/promises";
const caleDate = path.join(import.meta.dirname, "date", "orase.json");
console.log(path.relative(process.cwd(), caleDate));
await mkdir(path.dirname(caleDate), { recursive: true });
await writeFile(caleDate, JSON.stringify(["Iași", "Cluj", "Timișoara"]));
console.log(JSON.parse(await readFile(caleDate, "utf8")));
Rezultat
date/orase.json
[ 'Iași', 'Cluj', 'Timișoara' ]
Exemplul 3: join pentru Windows și Linux din același cod
path.posix și path.win32 lucrează mereu după regulile unui anumit sistem, indiferent unde rulează codul.
import path from "node:path";
console.log(path.posix.join("home", "ana", "proiect"));
console.log(path.win32.join("C:\\Users", "Ana", "proiect"));
Rezultat
home/ana/proiect
C:\Users\Ana\proiect
Greșeli frecvente
- Construiești căi cu
"dir" + "/" + nume: pe Windows separatorul diferă și apar ușor//dublate. Foloseștepath.join. - Folosești
path.joinpentru URL-uri (https://...): pe Windows rezultatul ar avea\, iar//din protocol ar fi comprimat. Pentru adrese web foloseștenew URL(cale, baza). - Lipești o cale primită de la utilizator (
../../etc/passwd):joinrezolvă..și poți ieși din directorul permis. Verifică rezultatul cupath.resolveșistartsWith.
Comenzi înrudite
path.resolve / path.relative: Transformă o cale în cale absolută (resolve), calculează drumul dintre două căi (relative) și verifică sau curăță căi.path.basename / dirname / extname: Extrage dintr-o cale numele fișierului (basename), directorul (dirname) sau extensia (extname).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.import.meta.dirname / filename: Calea directorului și a fișierului modulului curent: înlocuitorii pentru __dirname și __filename în module ES.url.fileURLToPath / pathToFileURL: Transformă un URL file:// (cum este import.meta.url) în cale obișnuită și o cale în URL file://.