Введение в Node.js
Что такое Node.js
Node.js — среда выполнения JavaScript вне браузера. Работает на сервере, на CLI, в десктопных приложениях.
Основан на движке V8 — том же, что в Chrome. Плюс встроенные модули для файловой системы, сети, процессов.
Автор — Райан Даль, 2009 год.
Зачем Node.js
До Node.js JavaScript жил только в браузере. Серверный код — PHP, Ruby, Python, Java.
Node.js дал:
- Один язык — фронт и бэк на JavaScript.
- Асинхронность — неблокирующий ввод-вывод.
- Скорость — V8 + событийный цикл.
- Огромная экосистема — npm.
Асинхронность
Ключевая идея: операции ввода-вывода (файлы, сеть, БД) не блокируют поток.
Синхронный код (плохо):
// Псевдокод
const data = readFileSync('file.txt'); // ждём
const user = db.query('SELECT ...'); // ждём
doSomething(user);
Асинхронный (хорошо):
readFile('file.txt', (data) => {
db.query('SELECT ...', (user) => {
doSomething(user);
});
});
Пока ждём — обрабатываются другие запросы.
Event Loop
Event Loop — сердце Node.js. Постоянно проверяет очереди и выполняет задачи.
Что делает:
- Выполняет синхронный код.
- Проверяет очереди (timers, I/O, microtasks).
- Вызывает callback-и.
- Повторяет.
Один поток — но очень эффективный.
Установка
Через nvm (рекомендую):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install 22
nvm use 22
Напрямую:
- Скачать с nodejs.org — LTS-версия.
- Windows: установщик.
- macOS:
brew install node.
Проверка:
node -v
# v22.10.0
npm -v
# 10.9.0
Первый скрипт
hello.js:
console.log('Привет, Node.js!');
Запуск:
node hello.js
# Привет, Node.js!
Всё. Никакого HTML, браузера, DOM. Просто код.
Что умеет Node.js
- HTTP-серверы — Express, Fastify, NestJS.
- API — REST, GraphQL, WebSocket.
- CLI-инструменты — как
npx,eslint. - Сборка — Vite, Webpack, esbuild.
- Скрипты — автоматизация, боты.
- Desktop — Electron.
- Real-time — чаты, игры, стриминг.
- Микросервисы — через gRPC, message brokers.
Что не стоит делать
- Тяжёлые вычисления — блокируют поток. Для этого — worker threads, child processes, или другой язык (Go, Rust, Python).
- Критичные системы — где важна жёсткая типизация и производительность (биллинг, банки).
- МL — Python лучше.
Node.js vs браузер
| Браузер | Node.js | |
|---|---|---|
| DOM | Есть | Нет |
| Файлы | Ограничен | Полный доступ |
| Модули | ES modules | CommonJS + ESM |
| Глобальные | window | global |
| Пакеты | npm | npm |
Один язык — разные среды.
Экосистема
npm — крупнейший реестр пакетов в мире. Более 2 миллионов пакетов.
Что есть:
- Express — веб-фреймворк.
- NestJS — структурированный фреймворк.
- Prisma / TypeORM — ORM.
- Jest / Vitest — тесты.
- esbuild / SWC — быстрые сборщики.
- Socket.IO — WebSocket.
- BullMQ — очереди.
Структура проекта
Минимум:
my-app/
├── package.json
├── node_modules/
├── src/
│ └── index.js
└── .gitignore
package.json:
{
"name": "my-app",
"version": "1.0.0",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js"
}
}
Создать:
npm init -y
Версии
Чётные — LTS (Long Term Support): 18, 20, 22. Нечётные — Current (экспериментальные): 19, 21, 23.
Правило: для продакшена — LTS.
Что дальше
- Установка и первый проект
- Модули: CommonJS и ESM
- Файловая система
- Асинхронность и Event Loop
- HTTP-сервер
- npm и package.json
- Переменные окружения
- EventEmitter
- Стримы и буферы
- Обработка ошибок
- Отладка
- Практика: CLI-инструмент
Итог
- Node.js — JavaScript вне браузера.
- V8 + модули + Event Loop = серверный JS.
- Один язык на фронте и бэке.
- Асинхронность — неблокирующий I/O.
- npm — крупнейший реестр пакетов.
- LTS — для продакшена.
Дальше — установка и первый проект.