Урок 01

Введение в 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. Постоянно проверяет очереди и выполняет задачи.

Что делает:

  1. Выполняет синхронный код.
  2. Проверяет очереди (timers, I/O, microtasks).
  3. Вызывает callback-и.
  4. Повторяет.

Один поток — но очень эффективный.

Установка

Через 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 modulesCommonJS + ESM
Глобальныеwindowglobal
Пакетыnpmnpm

Один язык — разные среды.

Экосистема

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.

Что дальше

  1. Установка и первый проект
  2. Модули: CommonJS и ESM
  3. Файловая система
  4. Асинхронность и Event Loop
  5. HTTP-сервер
  6. npm и package.json
  7. Переменные окружения
  8. EventEmitter
  9. Стримы и буферы
  10. Обработка ошибок
  11. Отладка
  12. Практика: CLI-инструмент

Итог

  • Node.js — JavaScript вне браузера.
  • V8 + модули + Event Loop = серверный JS.
  • Один язык на фронте и бэке.
  • Асинхронность — неблокирующий I/O.
  • npm — крупнейший реестр пакетов.
  • LTS — для продакшена.

Дальше — установка и первый проект.