EventEmitter
Тема дорожной карты · Node.js
EventEmitter — это базовый класс, лежащий в основе событийно-управляемой архитектуры Node.js. Он позволяет объектам генерировать именованные события и регистрировать функции-слушатели, асинхронно вызываемые при возникновении этих событий. Большинство встроенных модулей Node.js — включая http.Server, net.Socket, потоки чтения и объекты child_process — расширяют EventEmitter, что делает его фундаментальным строительным блоком модели асинхронного программирования среды выполнения JavaScript Node.js. Разработчики могут создавать собственные событийно-управляемые компоненты, расширяя EventEmitter через class MyEmitter extends EventEmitter {} и вызывая this.emit('data', payload) для уведомления всех зарегистрированных слушателей. EventEmitter предоставляет важные защитные механизмы, такие как предупреждение о превышении максимального числа слушателей по умолчанию (настраивается через emitter.setMaxListeners()), помогающее обнаруживать утечки памяти, вызванные многократным добавлением слушателей без их последующего удаления. В сложных серверных приложениях Node.js EventEmitter часто используется вместе с такими паттернами, как наблюдатель (observer), или в качестве внутрипроцессной шины событий для разделения компонентов серверного сервиса.
Как это работает
EventEmitter идёт с runtime — без установки. Основные: fs (файловая система, sync и promise API), path (кросс-платформенная сборка путей), http/https (серверы и клиенты), crypto (хеширование, шифры, randomBytes), os (системная информация), events (базовый EventEmitter), child_process (spawn/fork), stream (readable/writable), url, querystring, util, assert. У большинства есть callback и node:-prefixed promise-альтернатива в современных версиях.
Когда применять
Сначала core-модули, потом зависимость — они закрывают большинство задач без supply-chain риска. fs/promises покрывает 90% file I/O; crypto.randomUUID() делает uuid-библиотеки ненужными; URL (WHATWG) заменяет url.parse(). Префикс node: (require("node:fs")) для ясности в ESM. Promise API лучше callback в новом коде; legacy callback всё ещё нужен для streams.
Типичные ошибки
Ловушки EventEmitter: sync fs (readFileSync) в обработчиках запросов (блокирует event loop); конкатенация строк вместо path.join (Windows-backslash); Math.random() для криптографии (нужен crypto.randomBytes); не пробрасывают AbortSignal — HTTP-клиенты текут после отмены. Прочтите Node API docs страницу за страницей — половина мыслей "не хватает библиотеки" исчезает.