Какие знаешь основные модули Node.js?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные модули 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 кода
Эволюция и современные практики
Важно отметить несколько трендов:
- Promise-based API - многие модули теперь имеют promise-версии (fs.promises, timers/promises)
- ES Modules поддержка - современный синтаксис импорта:
import { readFile } from 'fs/promises';
import { fileURLToPath } from 'url';
- Experimental модули - например,
worker_threadsдля настоящей многопоточности
Ключевое преимущество этих встроенных модулей - они проходят тщательное тестирование, имеют отличную документацию и гарантированно работают в любой среде Node.js без дополнительных зависимостей. При разработке я всегда сначала проверяю, нельзя ли решить задачу встроенными средствами, прежде чем добавлять внешние пакеты npm. Это уменьшает размер зависимостей и повышает надежность приложения.
Понимание этих модулей - основа эффективной работы с Node.js, поскольку они формируют строительные блоки для большинства высокоуровневых фреймворков и библиотек экосистемы.