Node.js это среда выполнения, которая запускает JavaScript вне браузера: на сервере, в терминале или как инструмент командной строки. Это не язык программирования (язык это JavaScript) и не фреймворк (Express это фреймворк, который работает на Node.js). Node.js объединяет движок V8 от Google, который выполняет JavaScript, с event loop и встроенными API для файлов, сети и процессов, которых нет в браузерах.
Программа вывела содержимое файла, мажорную версию (v24) и undefined для window, потому что у Node.js нет веб-страницы, которая бы его дала. fs и process есть только в Node.js; запустите те же строки во вкладке браузера, и первая из них бросит ошибку.
Node.js это фреймворк или язык?
Ни то, ни другое. Язык это JavaScript. Node.js это программа, которая его выполняет, так же как JVM выполняет Java, а CPython выполняет Python. Фреймворки работают поверх: Express, Fastify и NestJS это библиотеки, которые ставятся в проект на Node.js. Подробное сравнение на странице Node.js и JavaScript.
Внутри Node.js состоит из четырёх частей:
- V8, движок JavaScript из Chrome. Он превращает ваш код в машинный и выполняет его.
- libuv, библиотека на C, которая даёт event loop и выполняет медленную работу (диск, сеть, таймеры) в фоне, а потом передаёт результат вашим callback.
- Собственные API Node:
fsдля файлов,httpдля серверов,path,process,crypto,eventsи другие, доступные черезrequireилиimportбез установки. - npm, менеджер пакетов, который идёт вместе с Node.js и даёт доступ к самому большому реестру пакетов среди всех языков.
Как запустить файл Node.js
Установите Node.js с официального сайта (берите версию LTS), затем проверьте его в терминале и запустите файл:
node --version # prints v24.x.x or similar
node app.js # runs app.js and exits when it has nothing left to do
node # with no file: an interactive prompt (the REPL)
Программа завершается сама, когда ей больше нечего ждать: нет таймеров, открытого сервера или незаконченного чтения файла. Поэтому скрипт завершается, а веб-сервер продолжает работать.
Неблокирующий ввод-вывод, главная идея
Node.js не ждёт медленную работу. Он запускает чтение файла или сетевой запрос, продолжает выполнять следующие строки и вызывает вашу функцию, когда результат готов.
Две строки console.log после readFile выполнились первыми, а содержимое файла пришло последним. Так один процесс Node.js обслуживает тысячи соединений: пока один запрос ждёт базу данных, event loop продолжает двигать остальные.
Node.js и браузер
| Браузер | Node.js | |
|---|---|---|
| Где работает | На веб-странице | В терминале или на сервере |
| Что есть | window, document, DOM, localStorage | fs, process, http, Buffer, require |
| Глобальный объект | window (и globalThis) | global (и globalThis) |
| Файлы на диске | Нет доступа | Полный доступ с правами вашего пользователя |
setTimeout, console, fetch, URL | Да | Да |
Для чего используют Node.js
- Веб-серверы и API: бэкенды на REST и GraphQL, часто с Express.
- Приложения реального времени: чаты, живые дашборды и многопользовательские игры на WebSocket, где одновременно открыто много соединений.
- Инструменты командной строки: сам npm, Vite, ESLint, Prettier и компилятор TypeScript работают на Node.js.
- Скрипты и автоматизация: переименование файлов, вызовы API, миграции данных.
Чаще всего Node.js используют для HTTP сервера, и для первого хватит встроенного модуля http:
Сервер ответил на GET /hello путём, который получил. Измените путь в строке запроса на /anything и отправьте: ответ изменится следом, потому что этот сервер обрабатывает любой URL одной функцией.
Когда выбирать Node.js
Выбирайте Node.js, когда работа в основном состоит из ожидания ввода-вывода (запросы, базы данных, файлы) и вы хотите один язык на фронтенде и бэкенде. Он хуже подходит для долгих вычислений, нагружающих процессор, вроде кодирования видео или больших численных расчётов: долгое вычисление блокирует единственный поток JavaScript, и все остальные запросы его ждут.
Часто задаваемые вопросы
Node.js это фронтенд или бэкенд?
В основном бэкенд. Node.js работает на сервере или на вашем компьютере, а не в браузере посетителя. Фронтенд-разработчики всё равно пользуются им каждый день, потому что npm, Vite и ESLint это программы на Node.js.
Кто и когда создал Node.js?
Райан Дал выпустил Node.js в 2009 году. Сейчас его поддерживает OpenJS Foundation: новая мажорная версия выходит каждые полгода, а версии с чётными номерами получают долгосрочную поддержку.
Нужно ли знать JavaScript перед Node.js?
Да, хотя бы основы: переменные, функции, объекты, массивы и callback или промисы. Node.js добавляет API, а не новый синтаксис, так что всё, что вы знаете о языке, применяется напрямую.
Node.js однопоточный?
Ваш JavaScript выполняется в одном потоке. За кулисами Node.js использует небольшой пул потоков для работы с файловой системой, DNS и частью криптографии, поэтому медленный ввод-вывод не блокирует ваш код, пока он ждёт.