Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как создать папку в Node.js

Короткий ответ

mkdir() с recursive: true создаёт все недостающие папки на пути и не ругается, если они уже есть:

import { mkdir, stat } from 'node:fs/promises';
 
await mkdir('storage/cache/images', { recursive: true });
await mkdir('storage/cache/images', { recursive: true });
 
console.log((await stat('storage/cache/images')).isDirectory());

Результат:

true

Временная папка

mkdtemp() создаёт папку с уникальным именем во временном каталоге системы:

import { mkdtemp, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join, basename } from 'node:path';
 
const dir = await mkdtemp(join(tmpdir(), 'upload-'));
console.log(basename(dir).startsWith('upload-'));
 
await rm(dir, { recursive: true });

Результат:

true

Удаление папки

rm() с recursive: true удаляет папку со всем содержимым. Будьте с ним осторожны: корзины нет.

import { mkdir, rm, writeFile } from 'node:fs/promises';
import { existsSync } from 'node:fs';
 
await mkdir('old-build', { recursive: true });
await writeFile('old-build/app.js', '');
await rm('old-build', { recursive: true, force: true });
 
console.log(existsSync('old-build'));

Результат:

false

Частая ошибка

Без recursive mkdir() падает, если нет родительской папки или папка уже существует:

import { mkdir } from 'node:fs/promises';
 
try {
  await mkdir('a/b/c');
} catch (error) {
  console.log(error.code);
}

Результат:

ENOENT

Функции из этого ответа

  • await — Ждёт результата промиса и возвращает его значение.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.