← Назад к вопросам

Какие знаешь основные модули Node.js?

2.0 Middle🔥 171 комментариев
#JavaScript Core#Браузер и сетевые технологии

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные модули Node.js (Core Modules)

Node.js поставляется с богатым набором встроенных модулей, которые не требуют дополнительной установки через npm. Эти модули предоставляют фундаментальные API для работы с файловой системой, сетью, асинхронными операциями и многим другим. Вот ключевые модули, которые я использую постоянно:

Файловая система и пути

fs (File System) - вероятно, самый востребованный модуль для работы с файлами:

const fs = require('fs').promises; // Использую promise-based API

async function readFile() {
    try {
        const data = await fs.readFile('file.txt', 'utf-8');
        console.log(data);
    } catch (error) {
        console.error('Error reading file:', error);
    }
}

// Синхронная версия (использую только в CLI-скриптах)
const fsSync = require('fs');
const content = fsSync.readFileSync('file.txt', 'utf-8');

path - незаменим для кросс-платформенной работы с путями:

const path = require('path');

const fullPath = path.join(__dirname, 'src', 'app.js');
const ext = path.extname(fullPath); // '.js'
const basename = path.basename(fullPath); // 'app.js'

Сетевые возможности и HTTP

http и https - основа веб-серверов в Node.js:

const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ message: 'Hello World' }));
});

server.listen(3000, () => {
    console.log('Server running on port 3000');
});

net - низкоуровневый модуль для TCP-сокетов, используется в WebSocket-библиотеках и специализированных протоколах.

Утилиты и системные операции

events - реализация паттерна "Наблюдатель", фундаментального для асинхронной архитектуры Node.js:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
    console.log('Event occurred!');
});
myEmitter.emit('event');

util - разнообразные вспомогательные функции:

const util = require('util');

const sleep = util.promisify(setTimeout);
await sleep(1000); // Современная замена setTimeout с промисами

// Депрекейтед, но всё ещё встречается
util.callbackify(someAsyncFunction);

os - информация о операционной системе:

const os = require('os');

console.log(os.platform()); // 'linux', 'darwin', 'win32'
console.log(os.cpus().length); // Количество ядер CPU
console.log(os.totalmem()); // Общая память в байтах

Потоки и буферы

stream - критически важный модуль для обработки больших данных:

const { Readable, Writable } = require('stream');

class MyReadable extends Readable {
    _read(size) {
        this.push('data chunk');
        this.push(null); // Сигнал конца потока
    }
}

const readable = new MyReadable();
readable.pipe(process.stdout); // Пайпинг в stdout

buffer - работа с бинарными данными:

const buf = Buffer.from('Hello', 'utf-8');
console.log(buf.toString('hex')); // 48656c6c6f

Другие важные модули

  • crypto - криптографические функции (хэши, шифрование)
  • zlib - сжатие и распаковка (gzip, deflate)
  • child_process - запуск дочерних процессов
  • cluster - использование многопроцессорности
  • url и querystring - парсинг URL и query-параметров
  • assert - модуль для тестирования (хотя сейчас чаще используют Jest/Vitest)
  • vm - изолированное выполнение JavaScript кода

Эволюция и современные практики

Важно отметить несколько трендов:

  1. Promise-based API - многие модули теперь имеют promise-версии (fs.promises, timers/promises)
  2. ES Modules поддержка - современный синтаксис импорта:
import { readFile } from 'fs/promises';
import { fileURLToPath } from 'url';
  1. Experimental модули - например, worker_threads для настоящей многопоточности

Ключевое преимущество этих встроенных модулей - они проходят тщательное тестирование, имеют отличную документацию и гарантированно работают в любой среде Node.js без дополнительных зависимостей. При разработке я всегда сначала проверяю, нельзя ли решить задачу встроенными средствами, прежде чем добавлять внешние пакеты npm. Это уменьшает размер зависимостей и повышает надежность приложения.

Понимание этих модулей - основа эффективной работы с Node.js, поскольку они формируют строительные блоки для большинства высокоуровневых фреймворков и библиотек экосистемы.