Встроенные модули

Тема дорожной карты · Node.js

Node.js поставляется с богатым набором встроенных модулей, обеспечивающих базовую серверную функциональность без необходимости выполнять npm install — эти модули скомпилированы непосредственно в бинарный файл среды выполнения JavaScript Node.js. Ключевые встроенные модули: fs для работы с файловой системой, path для кроссплатформенных манипуляций с путями, http и https для построения веб-серверов, events для паттерна EventEmitter, stream для потоковой передачи данных, crypto для криптографических операций, os для информации об операционной системе, child_process для создания дочерних процессов и util для вспомогательных утилит вроде util.promisify(). Встроенные модули Node.js импортируются с помощью require('fs') в CommonJS-проектах или import { readFile } from 'fs/promises' в ESM-проектах, причём они всегда имеют приоритет над npm-пакетами с таким же именем. Схема с префиксом node: (например, import { join } from 'node:path') является современным, однозначным способом импорта встроенных модулей Node.js, ясно указывающим читателям и бандлерам, что импорт является встроенным модулем, а не npm-зависимостью. Владение встроенными модулями Node.js является основой серверной разработки, позволяя сократить количество лишних зависимостей и поддерживать package.json в компактном состоянии.

Как это работает

Встроенные модули идёт с 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.

Типичные ошибки

Ловушки Встроенные модули: sync fs (readFileSync) в обработчиках запросов (блокирует event loop); конкатенация строк вместо path.join (Windows-backslash); Math.random() для криптографии (нужен crypto.randomBytes); не пробрасывают AbortSignal — HTTP-клиенты текут после отмены. Прочтите Node API docs страницу за страницей — половина мыслей "не хватает библиотеки" исчезает.

Связанные понятия

Полезные ресурсы