Skip to main content

Що робить fs.watch()?

У Node.js функція fs.watch() використовується для відстеження змін у файловій системі - тобто вона "стежить" за файлами чи папками й викликає callback, коли щось змінюється.

Сигнатура

javascript
fs.watch(filename[, options][, listener])

Аргументи:

  • filename - шлях до файлу чи директорії, за якою потрібно спостерігати.
  • options (необов'язково):
    • persistent: true за замовчуванням - якщо false, спостереження не утримуватиме процес Node.js "живим";
    • recursive: true - спостерігати рекурсивно за всіма піддиректоріями (тільки на macOS і Windows);
    • encoding: кодування для імен файлів (за замовчуванням 'utf8').
  • listener - callback, який викликається при змінах.

Приклад

javascript
const fs = require('fs'); fs.watch('./data', (eventType, filename) => { console.log(`Подія: ${eventType}`); console.log(`Змінено файл: ${filename}`); });

Можливі значення eventType:

  • "rename" - файл був перейменований, створений чи видалений;
  • "change" - файл був змінений (наприклад, його вміст оновився).

Приклад практичного застосування

Відстеження змін конфігураційного файлу:

javascript
fs.watch('config.json', (eventType) => { if (eventType === 'change') { console.log('Файл конфігурації оновлено! Перечитую налаштування...'); // Можна, наприклад, перечитати JSON } });

Особливості та обмеження

  1. Поведінка залежить від ОС Node.js використовує системні API:
  • inotify на Linux,
  • FSEvents на macOS,
  • ReadDirectoryChangesW на Windows. Тому події можуть трохи відрізнятися на різних платформах.
  1. Не всі зміни гарантовано будуть спіймані, особливо якщо багато файлів змінюються одночасно.
  2. fs.watch() не читає вміст файлу, вона лише повідомляє, що щось змінилося.
  3. Для надійнішого спостереження (з буфером і обробкою пропущених подій) краще використати бібліотеку chokidar - вона крос-платформна й стабільніша.

Підсумок

fs.watch() - це вбудована функція Node.js для спостереження за змінами файлів і папок. Вона викликає callback при подіях типу "change" чи "rename", і корисна для задач на кшталт:

  • автоматичного перезавантаження конфігурацій,
  • пересборки проєкту при зміні файлів,
  • моніторингу логів чи директорій.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.