Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як створити директорію через Node.js?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Основний спосіб - `await fs.promises.mkdir(path, { recursive: true })`: він створює папку асинхронно, не викидає помилку, якщо вона вже існує, і сам створює всі проміжні вкладені директорії. **Ключове:** без `{ recursive: true }` спроба створити вкладену папку, чий батько не існує, впаде з помилкою `ENOENT`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 1. Асинхронне створення папки (через callback) Класичний спосіб: ```javascript import fs from 'fs'; fs.mkdir('./uploads', (err) => { if (err) { console.error('Помилка під час створення папки:', err); return; } console.log('Папку створено!'); }); ``` - Якщо папка вже існує → буде помилка `EEXIST`; - Цей метод **не блокує** event loop, безпечний для серверів. ## 2. Сучасний спосіб (через `fs/promises` і `await`) Найзручніший і найсучасніший варіант - з промісами й `async/await`: ```javascript import { mkdir } from 'fs/promises'; try { await mkdir('./uploads'); console.log('Папку створено!'); } catch (err) { if (err.code === 'EEXIST') { console.log('Папка вже існує.'); } else { console.error('Помилка:', err); } } ``` - Асинхронно, чисто й без callback-ів; - Рекомендується для всіх сучасних версій Node.js (v14+). ## 3. Створення вкладених директорій (рекурсивно) Якщо потрібно створити **вкладені папки**, наприклад: ```javascript uploads/images/2025/january ``` Просто додай прапорець `{ recursive: true }`: ```javascript import { mkdir } from 'fs/promises'; await mkdir('./uploads/images/2025/january', { recursive: true }); console.log('Вкладені папки створено!'); ``` - Node сам створить усі відсутні рівні; - Якщо директорія вже є - **помилки не буде**. Це аналог команди в Linux: ```javascript mkdir -p uploads/images/2025/january ``` ## 4. Синхронний спосіб (блокуючий) Якщо ти створюєш папки при старті скрипта (наприклад, для логів чи конфігурацій): ```javascript import fs from 'fs'; try { fs.mkdirSync('./uploads'); console.log('Папку створено!'); } catch (err) { if (err.code === 'EEXIST') { console.log('Уже існує.'); } else { console.error('Помилка:', err); } } ``` - Працює миттєво, але **блокує event loop**. - Не рекомендується для серверних застосунків, лише для setup-скриптів. ## 5. Перевірка існування перед створенням Можна перевірити наявність папки заздалегідь: ```javascript import fs from 'fs'; if (!fs.existsSync('./uploads')) { fs.mkdirSync('./uploads'); console.log('Папку створено!'); } else { console.log('Папка вже є.'); } ``` Але в нових версіях Node краще просто використовувати `{ recursive: true }` - перевірка не потрібна. ## 6. Права доступу (`mode`) Параметр `mode` задає права доступу до папки (у UNIX-правах): ```javascript await mkdir('./secure', { mode: 0o700 }); ``` - `0o777` - усі користувачі можуть читати/писати/виконувати; - `0o700` - тільки власник; - За замовчуванням Node успадковує системні права. ## 7. Видалення й пересоздання (приклад) Якщо потрібно **очистити** директорію перед пересозданням: ```javascript import { rm, mkdir } from 'fs/promises'; await rm('./uploads', { recursive: true, force: true }); await mkdir('./uploads'); console.log('Папку пересоздано!'); ``` ## 8. Обробка типових помилок | Код помилки | Причина | Рішення | |---|---|---| | `EEXIST` | Папка вже є | Використати `{ recursive: true }` | | `ENOENT` | Батьківської папки не існує | Використати `{ recursive: true }` | | `EACCES` | Немає прав на створення | Перевірити права доступу | | `EPERM` | Системна заборона (Windows) | Запуск від імені адміністратора | ## 9. Приклад - створення структури проєкту ```javascript import { mkdir } from 'fs/promises'; const dirs = ['logs', 'data/uploads', 'data/backups']; for (const dir of dirs) { await mkdir(dir, { recursive: true }); console.log(`${dir} створено`); } ``` Це створить потрібну структуру автоматично, навіть якщо частина папок відсутня. ## 10. Коротке резюме | Метод | Асинхронність | Створює вкладені | Рекомендується | |---|---|---|---| | `fs.mkdir()` | Так (callback) | Ні | Старий стиль | | `fs.promises.mkdir()` | Так (`await`) | Так (`{ recursive: true }`) | Сучасний | | `fs.mkdirSync()` | Ні | Ні | Лише для CLI | | `fs.mkdirSync(..., { recursive: true })` | Ні | Так | При ініціалізації | ## Одним реченням > Щоб створити папку в Node.js, використовуй `await fs.promises.mkdir('шлях', { recursive: true })` - це безпечно, сучасно, не блокує потік і автоматично створює вкладені директорії.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.