fs.mkdir / fs.mkdtemp în Node.js

Fișiere și căi (fs, path) Node.js 10.0 (fs/promises, recursive: 10.12)

Creează un director (cu toți părinții lipsă, prin recursive: true) sau un director temporar cu nume unic (mkdtemp).

Sintaxă
import { mkdir, mkdtemp } from "node:fs/promises";
await mkdir(director, { recursive: true });
const temporar = await mkdtemp(prefix);

Ce face fs.mkdir / fs.mkdtemp

mkdir creează un director. Fără opțiuni, eșuează dacă directorul există deja (EEXIST) sau dacă lipsește directorul părinte (ENOENT).

Cu { recursive: true } creează și toți părinții lipsă, ca mkdir -p din terminal, și nu dă eroare dacă directorul există deja. Promisiunea se rezolvă cu calea primului director creat sau cu undefined dacă nu a fost nevoie să creeze nimic.

mkdtemp(prefix) creează un director cu nume unic: adaugă șase caractere aleatorii după prefix. Este util pentru fișiere temporare; de obicei îl pui în os.tmpdir() și îl ștergi la final cu rm.

Parametri

Parametru Descriere
director Calea directorului de creat.
recursive Opțiune mkdir: creează și părinții, fără eroare dacă există deja. Implicit false.
mode Opțiune mkdir: permisiunile directorului pe Linux și macOS (implicit 0o777, redus de umask).
prefix Începutul numelui pentru mkdtemp; poate conține o cale, de exemplu path.join(os.tmpdir(), "raport-").

Ce returnează

mkdir: undefined sau, cu recursive, calea primului director creat. mkdtemp: calea directorului creat.

Exemple

Exemplul 1: Directoare imbricate dintr-un singur apel

import { mkdir, readdir } from "node:fs/promises";

const primul = await mkdir("arhiva/2026/octombrie", { recursive: true });
console.log("Primul director creat:", primul);

const aDouaOara = await mkdir("arhiva/2026/octombrie", { recursive: true });
console.log("A doua oară:", aDouaOara);

console.log(await readdir("arhiva", { recursive: true }));

Rezultat

Primul director creat: arhiva
A doua oară: undefined
[ '2026', '2026/octombrie' ]

Exemplul 2: Fără recursive: erorile EEXIST și ENOENT

import { mkdir } from "node:fs/promises";

await mkdir("facturi");
console.log("Am creat directorul facturi");

for (const cale of ["facturi", "chitante/2026"]) {
  try {
    await mkdir(cale);
  } catch (eroare) {
    console.log(`${cale}: ${eroare.code}`);
  }
}

Rezultat

Am creat directorul facturi
facturi: EEXIST
chitante/2026: ENOENT

Exemplul 3: Director temporar cu mkdtemp

Numele primit este diferit la fiecare rulare, așa că exemplul afișează doar prefixul și lungimea părții aleatorii.

import { mkdtemp, writeFile, readdir, rm } from "node:fs/promises";
import path from "node:path";

const director = await mkdtemp("raport-");
const nume = path.basename(director);
console.log("Prefix:", nume.slice(0, 7), "| caractere aleatorii:", nume.length - 7);

await writeFile(path.join(director, "vanzari.csv"), "luna,total\noctombrie,1520\n");
console.log(await readdir(director));

await rm(director, { recursive: true });
console.log("Director temporar șters");

Rezultat

Prefix: raport- | caractere aleatorii: 6
[ 'vanzari.csv' ]
Director temporar șters

Greșeli frecvente

  • Uiți { recursive: true } și primești ENOENT pentru că lipsește un director părinte.
  • Verifici întâi dacă directorul există și abia apoi îl creezi. Cu recursive: true nu ai nevoie de verificare: apelul nu eșuează dacă directorul există.
  • Lași directoarele create cu mkdtemp în urmă. Ele nu se șterg singure; folosește rm(director, { recursive: true }), ideal într-un bloc finally.

Comenzi înrudite

  • fs.rm / fs.unlink / fs.rmdir: Șterge fișiere și directoare: rm pentru orice (cu recursive pentru directoare pline), unlink pentru un fișier, rmdir pentru un director gol.
  • fs.readdir: Listează conținutul unui director: numele fișierelor, opțional cu tipul lor (withFileTypes) și cu subdirectoarele (recursive).
  • fs.writeFile / fs.appendFile: Scrie un fișier (îl creează sau îl suprascrie) ori adaugă text la sfârșitul lui, cu appendFile.
  • os (node:os): Informații despre sistemul de operare: platformă, procesoare, memorie, directorul utilizatorului, sfârșitul de rând.
  • path.join: Lipește mai multe bucăți într-o singură cale, cu separatorul corect pentru sistemul de operare, și curăță ./ și ../.