Руководство по Node.js для новичков
Каждые несколько лет браузер с HTML5 изменяется — это совершенно нормально. Важно выбрать подходящие инструменты.


Иллюстрация: Оля Ежак для Skillbox Media

Чтобы создавать приложения на HTML5, нужно постоянно осваивать новые технологии и инструменты. Браузер с HTML5 — очень изменчивая платформа. Каждые несколько лет всё становится с ног на голову, а набор технологий для создания современного приложения изменяется.
Одно из таких «мастхэв-средств» разработки клиентских приложений — Node.js:
Что такое Node.js и почему он появился
Node.js — это среда выполнения JavaScript-программ, построенная на движке Chrome V8. Раньше на JS можно было делать только интерактивные сайты, так как это специализированный браузерный язык программирования. С программной платформой Node.js появилась возможность создавать «безбраузерные» приложения для компьютера. Это значит, что при необходимости на JavaScript теперь можно делать то же, что на Python и других скриптовых языках программирования общего назначения.
Язык JavaScript создавался в середине девяностых компанией Mozilla как простой скриптовый язык программирования, встраиваемый в код HTML-страниц. Как вспоминает его автор Брендан Эйх, разработчики ставили перед собой цель создать «язык для склеивания» составляющих частей веб-ресурса: изображений, плагинов и Java-апплетов, который был бы удобен для веб-дизайнеров и программистов, не обладающих высокой квалификацией. Он создавался для программирования как на стороне клиента, так и на стороне сервера.
Но, как часто бывает, со временем разработчики начали использовать JavaScript совсем иначе, чем было задумано. Самый неправильно понятый в мире язык программирования в итоге стал самым популярным. К настоящему времени он лидирует в качестве средства для разработки веб-приложений на стороне клиента. Это произошло из-за того, что эволюция веба двинулась в сторону интерактивных веб-приложений, хотя Сеть не была изначально предназначена для этого, как не был предназначен и JavaScript. Пришлось приспособиться.
Как платформа устроена изнутри
Для новой роли понадобился новый инструментарий. Постепенно JavaScript оброс целой инфраструктурой фреймворков, библиотек, компиляторов и протоколов. В том числе появилось несколько платформ исполнения серверных и клиентских приложений. Node.js — самая популярная из них. Эту платформу выпустил американский программист Райан Дал в 2009 году.
Программная платформа Node.js работает на движке V8, который транслирует JavaScript в машинный код. Грубо говоря, сама платформа является приложением C++, которое получает на входе JavaScript-код и выполняет его.
В среде исполнения есть собственный интерфейс на C++ для взаимодействия с устройствами ввода-вывода на компьютере. То есть эта платформа фактически превращает JavaScript из специализированного скриптового языка в язык общего назначения. Это означает, что на Node.js вы можете писать любые компьютерные программы.
Событийно-ориентированный подход
Главная особенность Node.js в том, что вместо традиционной модели параллелизма на основе потоков автор выбрал событийно-ориентированный подход. Это такая парадигма программирования, в которой выполнение программ определяется событиями. Например, это действие пользователя, поступление сетевого пакета, сообщение из другой программы и так далее.
Такой подход сильно упрощает программирование некоторых приложений, особенно при реализации удобного интерфейса ввода-вывода (I/O), как у Node.js. По легенде, идея создания пришла автору, когда он увидел полосу загрузки файлов на Flickr, которая не понимала реального процента загрузки файлов, то есть не имела обратной связи от браузера из-за отсутствия событийной привязки.
С распространением в интернете социальных сетей и других интерактивных сайтов резко выросла востребованность Node.js как платформы для приложений, реагирующих на действия пользователя: чатов, игр, инструментов совместной работы — теперь всё это делают на JavaScript с помощью среды исполнения.
Таким образом, Node.js — это событийно-ориентированный I/O-фреймворк на JavaScript. Технические особенности делают приложения на его основе легковесными и эффективными. Этим и объясняется его огромная популярность.
Разработку языка координирует OpenJS Foundation, который финансируется по программе поддержки свободных проектов Linux Foundation. Это свободный распределённый проект, в создании которого на безвозмездной основе участвуют тысячи разработчиков со всего мира.
Для чего нужен и где используется Node.js
Среда исполнения представляет собой платформу для написания JavaScript-приложений с использованием внешних библиотек.
Благодаря Node.js написанный для браузера код JavaScript получает доступ к глобальным объектам, таким как document и window, наряду с другими API и библиотеками. С помощью Node.js код обращается к жёсткому диску, базам данных и Сети. Это делает возможным написание любых приложений: от утилит командной строки и видеоигр до полноценных веб-серверов.
Чаще всего Node.js используется при написании веб-приложений с интенсивным вводом-выводом. Самый распространённый пример — это веб-серверы. Ещё платформу используют для создания приложений реального времени: чатов, коммуникационных программ и игр. Многие приложения имеют и серверную, и клиентскую части.
Пакетный менеджер NPM
Важной частью Node.js является пакетный менеджер NPM — Node Package Manager, который устанавливается вместе с интерпретатором (см. ниже).
Как установить и запустить Node.js
Последнюю версию Node.js можно скачать с официального сайта nodejs.org. Для большинства пользователей рекомендуется установка версии с долговременной поддержкой (LTS). На данный момент это 18.14.2.

Установленная среда исполнения предоставляет две утилиты командной строки: Node и NPM. Первая запускает софт, созданный на JavaScript.
Пишем первую программу на Node.js
Напишем простую программу на JavaScript, которая выводит в консоль текст:
Сохраним её в файл skillbox.js. Так вот, команда node может выполнить эту программу с JS-кодом:

Команда node выполнила программу skillbox.js — вывела в консоль текст «Skillbox test».
Кроме Node на компьютер устанавливается программа NPM — это система управления пакетами Node, необходимая для установки свободно распространяемых инструментов из Сети. Нам как раз впоследствии понадобятся некоторые из этих инструментов, которые нужно будет скачать после установки NPM. Все программы здесь скачиваются и устанавливаются стандартным путём:
console.log («Skillbox test»);
Получить список доступных пакетов и их краткое описание можно с помощью следующей команды:
Например, нам понадобится программа browser-sync для запуска примеров кода в браузере и автоматического обновления страницы при сохранении изменений в коде. Инструмент устанавливается такой командой (с параметром -g, который означает «глобальную» установку пакета для выполнения из любого каталога):
npm install -g browser-sync
Node.js как конструктор приложений
Платформа Node.js содержит огромное количество полезных модулей, помогающих при работе с файлами и каталогами, взаимодействии по Сети и обработке событий. Для Node.js выпущено более 650 000 пакетов свободного программного обеспечения, поэтому создание многих приложений похоже на сборку из кубиков конструктора.
Кроме Node и NPM нужно ещё установить редактор кода, если его у вас до сих пор нет. Есть несколько удобных редакторов, в том числе Visual Studio Code от Microsoft, Brackets от Adobe и популярный свободный редактор Atom. Все они бесплатные.
Полное руководство по Node.js — Изучите Node для начинающих¶
Это руководство является руководством по началу работы с Node.js, серверной средой выполнения JavaScript.
Обзор¶
Node.js — это среда выполнения для JavaScript, которая работает на сервере.
Node.js с открытым исходным кодом, кросс-платформенный, и с момента своего появления в 2009 году он приобрел огромную популярность и сейчас играет значительную роль на сцене веб-разработки. Если звезды GitHub являются одним из факторов популярности, то наличие 58000+ звезд означает большую популярность.
Node.js запускает движок V8 JavaScript, ядро Google Chrome, вне браузера. Node.js может использовать работу инженеров, которые сделали (и будут продолжать делать) Chrome JavaScript runtime молниеносно быстрым, и это позволяет Node.js воспользоваться огромными улучшениями производительности и компиляцией Just-In-Time, которую выполняет V8. Благодаря этому код JavaScript, выполняемый в Node.js, может стать очень производительным.
Приложение Node.js выполняется одним процессом, без создания нового потока для каждого запроса. Node предоставляет набор примитивов асинхронного ввода-вывода в своей стандартной библиотеке, которые предотвращают блокировку кода JavaScript, и в целом библиотеки в Node.js написаны с использованием неблокирующих парадигм, что делает блокирующее поведение скорее исключением, чем нормой.
Когда Node.js необходимо выполнить операцию ввода-вывода, например, чтение из сети, доступ к базе данных или файловой системе, вместо блокировки потока Node.js возобновит операции после получения ответа, вместо того чтобы тратить циклы процессора на ожидание.
Это позволяет Node.js обрабатывать тысячи одновременных соединений с одним сервером без необходимости управления параллелизмом потоков, что стало бы основным источником ошибок.
Node.js имеет уникальное преимущество, поскольку миллионы разработчиков фронтенда, которые пишут JavaScript для браузера, теперь могут выполнять код на стороне сервера и код на стороне фронтенда без необходимости изучать совершенно другой язык.
В Node.js можно без проблем использовать новые стандарты ECMAScript, поскольку вам не нужно ждать, пока все ваши пользователи обновят свои браузеры — вы сами решаете, какую версию ECMAScript использовать, изменяя версию Node.js, и вы также можете включить определенные экспериментальные функции, запустив Node с флагами.
Он содержит огромное количество библиотек.¶
Благодаря своей простой структуре менеджер пакетов node ( npm ) помог экосистеме Node.js разрастись. Сейчас в реестре npm размещено почти 500 000 пакетов с открытым исходным кодом, которые вы можете свободно использовать.
Пример приложения Node.js¶
Самый распространенный пример Hello World из Node.js — это веб-сервер:
Чтобы запустить этот фрагмент, сохраните его как файл server.js и запустите node server.js в терминале.
Этот код сначала включает в себя модуль Node.js http .
Node.js имеет удивительную стандартную библиотеку, включая первоклассную поддержку сетевых технологий.
Метод createServer() из http создает новый HTTP-сервер и возвращает его.
Сервер настроен на прослушивание указанного порта и имени хоста. Когда сервер готов, вызывается функция обратного вызова, в данном случае информирующая нас о том, что сервер запущен.
При получении нового запроса вызывается функция request event, которая предоставляет два объекта: запрос (объект http.IncomingMessage ) и ответ (объект http.ServerResponse ).
Эти 2 объекта необходимы для обработки HTTP-вызова.
Первый предоставляет детали запроса. В этом простом примере он не используется, но вы можете получить доступ к заголовкам запроса и данным запроса.
Второй используется для возврата данных вызывающей стороне.
В данном случае с:
Мы устанавливаем свойство statusCode в 200 , чтобы указать на успешный ответ.
Мы устанавливаем заголовок Content-Type :
. и мы завершаем закрытие ответа, добавляя содержимое в качестве аргумента к end() :
Node.js фреймворки и инструменты¶
Node.js — это низкоуровневая платформа. Чтобы сделать работу разработчиков проще и интереснее, на базе Node.js были созданы тысячи библиотек.
Многие из них со временем стали популярными. Вот неполный список тех, которые я считаю очень важными и достойными изучения:
-
— Один из самых простых и в то же время мощных способов создания веб-сервера. Его минималистский подход и беспристрастное внимание к основным функциям сервера является ключом к его успеху. — Невероятно мощный фреймворк полного стека, позволяющий использовать изоморфный подход к созданию приложений на JavaScript и разделять код на клиенте и сервере. Когда-то он был готовым инструментом, который предоставлял все, но теперь он интегрируется с такими библиотеками front-end, как React, Vue и Angular. Meteor можно использовать и для создания мобильных приложений. — Созданный той же командой, что и Express, Koa стремится быть еще проще и меньше, опираясь на многолетние знания. Новый проект родился из необходимости создавать несовместимые изменения, не нарушая существующего сообщества. — Это фреймворк для рендеринга приложений на стороне сервера React. — Это очень легкий сервер для создания асинхронных HTTP микросервисов. — Это механизм коммуникации в реальном времени для создания сетевых приложений.
Как установить Node.js¶
Как можно установить Node.js на вашу систему: пакетный менеджер, установщик с официального сайта или nvm¶
Node.js может быть установлен различными способами. В этой заметке освещены наиболее распространенные и удобные из них.
Официальные пакеты для всех основных платформ доступны здесь.
Один из очень удобных способов установки Node.js — через менеджер пакетов. В данном случае у каждой операционной системы он свой.
На macOS стандартом де-факто является Homebrew, который — после установки — позволяет установить Node.js очень легко, выполнив эту команду в CLI:
Другие менеджеры пакетов для Linux и Windows перечислены здесь.
nvm — популярный способ запуска Node.js. Он позволяет легко менять версию Node.js, устанавливать новые версии, чтобы попробовать и легко откатиться назад, если, например, что-то сломается.
Это также очень полезно для тестирования вашего кода со старыми версиями Node.js.
Я рекомендую использовать официальную программу установки, если вы только начинаете и еще не используете Homebrew. В противном случае Homebrew — мое любимое решение.
Сколько JavaScript нужно знать, чтобы использовать Node.js?¶
Если вы только начинаете изучать JavaScript, насколько глубоко вам нужно знать язык?
Новичку трудно достичь того момента, когда вы будете достаточно уверены в своих способностях программиста.
Изучая язык, вы также можете запутаться, где заканчивается JavaScript и начинается Node.js, и наоборот.
Я бы рекомендовал вам хорошо усвоить основные концепции JavaScript, прежде чем погружаться в Node.js:
Зная эти понятия, вы уже на пути к тому, чтобы стать опытным разработчиком JavaScript как в браузере, так и в Node.js.
Следующие концепции также являются ключевыми для понимания асинхронного программирования, которое является одной из фундаментальных составляющих Node.js:
Различия между Node.js и браузером¶
Чем написание JavaScript-приложений в Node.js отличается от программирования для Web в браузере?
И браузер, и Node используют JavaScript в качестве языка программирования.
Создание приложений, работающих в браузере, — это совершенно другое дело, чем создание приложения в Node.js.
Несмотря на то, что это всегда JavaScript, есть несколько ключевых различий, которые делают опыт радикально другим.
У front-end разработчика, который пишет приложения на Node.js, есть огромное преимущество — язык все тот же.
У вас есть огромная возможность, потому что мы знаем, как трудно полностью, глубоко изучить язык программирования. Используя один и тот же язык для выполнения всей работы в Интернете — как на клиенте, так и на сервере — вы находитесь в уникальном положении преимущества.
Что меняется, так это экосистема.
В браузере большую часть времени вы взаимодействуете с DOM или другими API веб-платформы, такими как Cookies. В Node.js их, конечно, не существует. У вас нет document , window и всех остальных объектов, предоставляемых браузером.
И в браузере у нас нет всех тех приятных API, которые Node.js предоставляет через свои модули, например, функции доступа к файловой системе.
Еще одно большое различие заключается в том, что в Node.js вы контролируете среду. Если только вы не создаете приложение с открытым исходным кодом, которое каждый может развернуть где угодно, вы знаете, на какой версии Node.js вы будете запускать приложение. По сравнению с браузерной средой, где у вас нет возможности выбирать, какой браузер будут использовать ваши посетители, это очень удобно.
Это означает, что вы можете писать все современные ES6—7—8—9 JavaScript, которые поддерживает ваша версия Node.
Поскольку JavaScript развивается так быстро, но браузеры могут быть немного медленными, а пользователи немного медлят с обновлением — иногда в Интернете вы застреваете в использовании старых версий JavaScript/ECMAScript.
Вы можете использовать Babel для преобразования вашего кода в ES5-совместимый перед отправкой его в браузер, но в Node.js вам это не понадобится.
Еще одно отличие заключается в том, что в Node.js используется система модулей CommonJS, в то время как в браузере мы начинаем видеть внедрение стандарта ES Modules.
На практике это означает, что пока что вы используете require() в Node.js и import в браузере.
Движок JavaScript V8¶
V8 — это название движка JavaScript, на котором работает Google Chrome. Именно он принимает наш JavaScript и выполняет его во время просмотра веб-страниц в Chrome.
V8 обеспечивает среду выполнения, в которой выполняется JavaScript. DOM и другие API веб-платформы предоставляются браузером.
Самое интересное, что движок JavaScript не зависит от браузера, в котором он размещен. Эта ключевая особенность обеспечила подъем Node.js. Движок V8 был выбран Node.js еще в 2009 году, и по мере роста популярности Node.js, V8 стал тем движком, на котором сейчас работает невероятное количество кода на стороне сервера, написанного на JavaScript.
Экосистема Node.js огромна, и благодаря ей V8 также используется в приложениях для настольных компьютеров, в таких проектах, как Electron.
Другие движки JS¶
Другие браузеры имеют свой собственный движок JavaScript:
- Firefox имеет Spidermonkey.
- Safari имеет JavaScriptCore (также называется Nitro)
- Edge имеет Chakra
и многие другие.
Все эти движки реализуют стандарт ECMA ES-262, также называемый ECMAScript, стандарт, используемый в JavaScript.
Стремление к производительности¶
V8 написан на C++ и постоянно совершенствуется. Он переносимый и работает на Mac, Windows, Linux и некоторых других системах.
В этом введении в V8 я буду игнорировать детали реализации V8. Их можно найти на более авторитетных сайтах, включая официальный сайт V8, и они меняются со временем, часто радикально.
V8 постоянно развивается, как и другие движки JavaScript, чтобы ускорить работу Сети и экосистемы Node.js.
В Интернете существует гонка за производительностью, которая продолжается уже много лет, и мы (как пользователи и разработчики) получаем большую выгоду от этой конкуренции, поскольку год за годом получаем более быстрые и оптимизированные машины.
Компиляция¶
JavaScript принято считать интерпретируемым языком, но современные движки JavaScript уже не просто интерпретируют JavaScript, они его компилируют.
Это происходит с 2009 года, когда компилятор SpiderMonkey JavaScript был добавлен в Firefox 3.5, и все последовали этой идее.
JavScript компилируется внутри V8 с помощью компиляции just-in-time (JIT) для ускорения выполнения.
Это может показаться неинтуитивным. Но с момента появления Google Maps в 2004 году JavaScript превратился из языка, который обычно выполнял несколько десятков строк кода, в полноценные приложения с тысячами и сотнями тысяч строк, работающие в браузере.
Теперь наши приложения могут часами работать в браузере, а не быть просто несколькими правилами проверки форм или простыми скриптами.
В этом новом мире компиляция JavaScript имеет смысл, потому что, хотя на подготовку JavaScript готового кода может потребоваться немного больше времени, он будет гораздо более производительным, чем чисто интерпретируемый код.
Как выйти из программы Node.js¶
Существуют различные способы завершения работы приложения Node.js.
При запуске программы в консоли вы можете закрыть ее с помощью ctrl-C , но то, что я хочу обсудить здесь, это программный выход.
Давайте начнем с самого радикального варианта и посмотрим, почему его лучше не использовать.
Основной модуль process предоставляет удобный метод, который позволяет вам программно выйти из программы Node.js: process.exit() .
Когда Node.js выполняет эту строку, процесс немедленно завершается.
Это означает, что любой ожидающий обратный вызов, любой сетевой запрос, который все еще отправляется, любой доступ к файловой системе или процессы, пишущие в stdout или stderr — все это будет немедленно безболезненно завершено.
Если вас это устраивает, вы можете передать целое число, которое сообщит операционной системе код завершения:
По умолчанию код выхода равен 0 , что означает успех. Различные коды выхода имеют разное значение, которое вы можете использовать в своей системе, чтобы программа могла общаться с другими программами.
Подробнее о кодах выхода вы можете прочитать здесь.
Вы также можете установить свойство process.exitCode :
и когда программа впоследствии завершится, Node.js вернет этот код выхода.
Программа изящно завершится, когда вся обработка будет закончена.
Много раз с помощью Node.js мы запускаем серверы, например, этот HTTP-сервер:
Эта программа никогда не завершится. Если вы вызовете process.exit() , любой ожидающий или выполняющийся запрос будет прерван. Это нехорошо.
В этом случае вам нужно послать команде сигнал SIGTERM и обработать его с помощью обработчика сигнала процесса:
Примечание: process не требует require , он автоматически доступен.
Что такое сигналы? Сигналы — это система обмена данными Portable Operating System Interface (POSIX): уведомление, посылаемое процессу, чтобы оповестить его о произошедшем событии.
SIGKILL — это сигнал, который сообщает процессу о немедленном завершении, и в идеале должен действовать подобно process.exit() .
SIGTERM — это сигнал, который сообщает процессу о необходимости плавного завершения. Это сигнал, который посылается менеджерами процессов, такими как upstart или supervisord и многими другими.
Вы можете послать этот сигнал изнутри программы, в другой функции:
Или из другой программы, запущенной на Node.js, или из любого другого приложения, запущенного в вашей системе, которое знает PID процесса, который вы хотите завершить.
Как читать переменные окружения из Node.js¶
Модуль process ядра Node предоставляет свойство env , в котором хранятся все переменные окружения, которые были установлены в момент запуска процесса.
Вот пример, который обращается к переменной окружения NODE_ENV , которая по умолчанию установлена в development .
Установив ее в production перед запуском сценария, вы сообщите Node.js, что это производственная среда.
Таким же образом вы можете получить доступ к любой пользовательской переменной окружения, которую вы установили.
Здесь мы задали 2 переменные для API_KEY и API_SECRET
Мы можем получить их в Node.js, выполнив команду
Вы можете записать переменные окружения в файл .env (который следует добавить в .gitignore , чтобы избежать публикации на GitHub), затем
и в начале вашего основного файла Node добавьте
Таким образом, вы можете не указывать переменные окружения в командной строке перед командой node , и эти переменные будут подхвачены автоматически.
Примечание: Некоторые инструменты, например, Next.js, делают переменные окружения, определенные в .env , автоматически доступными без необходимости использования dotenv .
Где разместить приложение Node.js¶
Приложение Node.js может быть размещено во многих местах, в зависимости от ваших потребностей.
Вот неполный список вариантов, которые вы можете рассмотреть, когда захотите развернуть свое приложение и сделать его общедоступным.
Я буду перечислять варианты от самых простых и ограниченных к более сложным и мощным.
Самый простой вариант: локальный туннель.¶
Даже если у вас динамический IP или вы находитесь под NAT, вы можете развернуть свое приложение и обслуживать запросы прямо со своего компьютера, используя локальный туннель.
Этот вариант подходит для быстрого тестирования, демонстрации продукта или совместного использования приложения с очень небольшой группой людей.
Очень хорошим инструментом для этого, доступным на всех платформах, является ngrok.
Используя его, вы можете просто набрать ngrok PORT и нужный вам PORT будет открыт для интернета. Вы получите домен ngrok.io , но при платной подписке вы можете получить пользовательский URL, а также больше возможностей безопасности (помните, что вы открываете свою машину для публичного Интернета).
Еще один сервис, который вы можете использовать, — localtunnel.
Развертывание нулевой конфигурации¶
Glitch¶
Glitch — это игровая площадка и способ создавать свои приложения быстрее, чем когда-либо, и видеть их в реальном времени на собственном поддомене glitch.com. В настоящее время вы не можете иметь собственный домен, и есть несколько ограничений, но это действительно здорово для создания прототипов. Он выглядит забавно (и это плюс), и это не отупляющая среда — вы получаете всю мощь Node.js, CDN, безопасное хранение учетных данных, импорт/экспорт GitHub и многое другое.
Предоставляется компанией, стоящей за FogBugz и Trello (и соавторами Stack Overflow).
Я часто использую его в демонстрационных целях.
Codepen¶
Codepen — это удивительная платформа и сообщество. Вы можете создать проект с несколькими файлами и развернуть его с помощью пользовательского домена.
Serverless¶
Способ публикации приложений и отсутствие сервера для управления — это Serverless. Serverless — это парадигма, в которой вы публикуете свои приложения как функции, а они отвечают на запросы конечной точки сети (также называемой FAAS — Functions As A Service).
К очень популярным решениям относятся:
Они оба предоставляют слой абстракции для публикации на AWS Lambda и других FAAS-решений на базе Azure или Google Cloud.
PAAS расшифровывается как Platform As A Service. Эти платформы убирают многие вещи, о которых вы должны беспокоиться при развертывании вашего приложения.
Zeit Now¶
Zeit — интересный вариант. Вы просто вводите now в терминале, и он берет на себя заботу о развертывании вашего приложения. Есть бесплатная версия с ограничениями, а платная версия более мощная. Вы просто забываете о существовании сервера, вы просто развертываете приложение.
Введение в Node JS
Node.js представляет среду выполнения кода на JavaScript, которая построена на основе движка JavaScript Chrome V8, который позволяет транслировать вызовы на языке JavaScript в машинный код. Node.js прежде всего предназначен для создания серверных приложений на языке JavaScript. Хотя также существуют проекты по написанию десктопных приложений (Electron) и даже по созданию кода для микроконтроллеров. Но прежде всего мы говорим о Node.js, как о платформе для создания веб-приложений.
Node.js является открытым проектом, исходники которого можно посмотреть на github.com.
Установка
Для загрузки перейдет на официальный сайт https://nodejs.org/en/. На главной странице мы сразу увидим две возможные опции для загрузки: самая последняя версия NodeJS и LTS-версия.

Загрузим последнюю версию. В моем случае это версия 16.1.0. Для Windows установщик представляет файл с расширением msi. После запуска откроется программа установщика:

После успешной установки вы можем ввести в командной строке/терминале команду node -v , и нам отобразится текущая версия node.js:
Версии node.js для других операционных систем наряду с исходниками можно найти по адресу https://nodejs.org/en/download/
Инструменты разработки
Для разработки под Node JS достаточно простейшего текстового редактора, в частности, Notepad++. Также можно использовать более изощренные редакторы типа Atom, Sublime, Visual Studio Code, либо среды разработки, которые поддерживают работу с Node.JS, например, Visual Studio или WebStorm.
После установки NodeJS нам становится доступным такой инструмент как REPL. REPL (Read Eval Print Loop) представляет возможность запуска выражений на языке JavaScript в командной строке или терминале.
Так, запустим командную строку (на Windows) или терминал (на OS X или Linux) и введем команду node . После ввода этой команды мы можем выполнять различные выражения на JavaScript:
Или используем какую-нибудь функцию JS:
Можно определять свои функции и затем их вызывать, например, возведение числа в квадрат:
Если мы введем что-то неправильно, то REPL укажет об ошибке:

Выполнение файла
Вместо того чтобы вводить весь код напрямую в консоль, удобнее вынести его во внешний файл. Например, создадим на жестком диске новый каталог, допустим, C:\node\helloapp , в который поместим новый файл app.js со следующим кодом:
В командной строке перейдем с помощью команды cd к каталогу helloapp, а затем выполним команду:
Все про Node.js: зачем писать бэкенд на JavaScript и сколько за это платят

Вы читаете обновленную и улучшенную версию нашей старой статьи.
Что такое Node.js и где применяется эта технология
Node.js — среда выполнения кода JavaScript вне браузера, которая позволяет писать серверный код для веб-страниц и веб-приложений, а также для программ командной строки. С помощью Node.js реализуется парадигма «JavaScript для всего». Она предполагает использование одного языка программирования для разработки веб-приложений вместо применения разных языков для работы над фронтендом и бэкендом.
Node.js — не отдельный язык программирования, а платформа для использования JavaScript на стороне сервера. Если говорить о языке, то как для фронтенда, так и для бэкенда используется один и тот же JavaScript. Разница только в наборе API, которые используют фронтендеры и бэкендеры.
Браузерный JavaScript использует Web API, которые обеспечивают доступ к DOM и пользовательскому интерфейсу страниц и веб-приложений. Серверный JavaScript использует API, обеспечивающие доступ к файловой системе приложений, http-запросам, потокам.
То есть Node.js — это технология для использования JS на бэкенде. С особенностями и перспективами развития языка JavaScript можно ознакомиться в соответствующей статье, а здесь речь идёт об одной из технологий данного языка.
Экскурс в историю: с 2009 до 2019
Node.js была представлена в 2009 году — её создал инженер Райан Дал, а спонсором разработки выступила компания Joyent. Она известна поддержкой опенсорсных проектов, включая Node.js, Illumos, SmartOS.
Райан Дал использовал для создания Node.js движок V8. Платформа реализована с низкоуровневой неблокирующей моделью ввода/вывода, которая построена на событийно-ориентированной модели. В конце 2014 года инженер Фёдор Индутный, который входил в основную команду разработчиков платформы, создал популярный форк Node.js — io.js. Форк появился из-за недовольства разработчиков политикой компании Joyent.
Платформа io.js превосходила Node.js в производительности, но создатели форка уже в 2015 году решили воссоединиться с Node.js, чтобы влиять на развитие основной платформы. В настоящее время разработкой формально руководит Node.js Foundation.
Сфера применения: где используют Node.js
Node.js применяется для бэкенд-разработки на JavaScript. И если в браузере JavaScript тотально доминирует, и конкурентов этого языка на фронтенде не видно даже на горизонте, то в бэкенд-разработке ситуация другая. Здесь JS конкурирует с PHP, Python и другими языками.
Выбор серверного JavaScript для бэкенда обеспечивает проекту ряд преимуществ:
- Рост эффективности разработки благодаря использованию одного языка для фронт- и бэкенда и возможности переиспользования кода
- Возможность использовать npm — самый большой пакетный менеджер
- Более простой по сравнению с другими стеками поиск исполнителей, так как JavaScript входит в число самых популярных языков программирования.
Node.js хорошо подходит для разработки RTA — веб-приложений, реагирующих на действия пользователя в режиме реального времени. Например, это может быть онлайн-редактор типа Google Docs, который позволяет работать над одним документом нескольким пользователям одновременно.
Node.js vs PHP и Python
Node.js уступает PHP в популярности. Достаточно вспомнить, что на PHP написаны самые популярные системы управления контентом, включая WordPress, Joomla!, Drupal. Только на WordPress работает около трети всех сайтов в интернете.
Инфраструктура PHP скорее превосходит инфраструктуру Node.js. Например, разработчики на PHP могут выбирать между несколькими достойными веб-фреймворками.
Python считается одним из лучших языков для изучения программирования. Но главная разница между Python и Node.js заключается в сферах применения. Python более универсальный: его используют как в веб-разработке, так и в Data Science, Machine Learning и других сферах. Node.js скорее «заточен» под веб-разработку. Благодаря Electron эта технология также применяется для разработки десктопных приложений.
Тем не менее инфраструктура Node.js зрелая, и у разработчиков есть качественные и удобные инструменты. Например, выше упоминались пакетный менеджер npm и фреймворк Electron для создания десктопных приложений. Также стоит упомянуть фреймворки Express и Nest.js, предназначенные для разработки веб-приложений.
На Хекслете есть большая профессия на Node.js-программиста с нуля: В процессе обучения вы получите фундаментальные знания: научитесь программировать на JavaScript, использовать современные инструменты для создания бэкенд-приложений, включая Express.js, Koa, PostgreSQL. Первые курсы в профессии доступны бесплатно. Регистрируйтесь и начинайте учиться
Зарплата Node.js-разработчика: сколько платят и есть ли вакансии
По данным сервиса «Хабр Карьера» на первую половину 2022 года, медианная зарплата JavaScript разработчика составляет 150 тыс. рублей в месяц. Нужно понимать, что в эту статистику входят зарплаты как фронтенд-, так и бэкенд-разработчиков на JS. Разработчики на Python зарабатывают 140 тыс. рублей в месяц, а PHP-программисты — тоже порядка 150 000 рублей в месяц.
В августе 2022 года при запросе Node.JS в сервисе HeadHunter выдавалось 1548 вакансий на территории России. Из них 533 вакансии предлагали зарплату от 100 тыс. рублей до 200 тыс. рублей. Еще 316 вакансий — с зарплатой до 300 тыс. рублей, 134 вакансии — до 400 тыс. рублей, 45 — до 500 тыс. рублей и 19 вакансий — с заработной платой более 500 тыс. рублей в месяц.
Игорь Камышев: судя по тенденциям, Node.js будет становиться только популярнее

Игорь Камышев, разработчик веб-приложений и техлид в «Самокате». Разрабатывает экосистему библиотек для Node.js Solid Soda. Автор телеграм-канала kamyshev.code
— Почему стоит изучать Node.js?
— Node.js — необычная технология. Современная экосистема JavaScript создавалась непрограммистами, из-за этого в ней очень много свежих и необычных идей. Начать писать приложения на Node.js проще, чем на Java, Ruby или PHP. Плюс, это достаточно зрелая платформа, многие проблемы уже решены, а лучшие подходы известны и описаны.
— Какие перспективы у бэкенда на JavaScript по сравнению с другими языками и технологиями?
— Любой бэкенд может быть написан на любом языке. Вопрос только в скорости разработки и надежности этого решения. Приложения для Node.js можно быстро писать, но для обеспечения надежности нужно постараться. Важно понимать, что JavaScript — это язык со слабой динамической типизацией, чтобы это компенсировать нужно заранее продумать архитектуру приложения и потратить больше времени на написание тестов. С другой стороны, можно взять TypeScript и получить гарантию типобезопасности (не полную, конечно, но лучше чем ничего).
На мой взгляд, Node.js подойдет для очень широкого класса бэкендов. Начиная от интернет-магазинов и заканчивая образовательными сервисами.
— Будет ли бэкенд на JS востребован в будущем?
— Судя по тенденциям роста, Node.js будет становиться только популярнее. Сложно оценить, когда этот рост прекратится, но сейчас — это факт.
— Сколько времени нужно учиться бэкенд-разработке на JS с нуля до джуниора?
— Node.js — супер-минималистичная платформа. По сути, чтобы разобраться с ней, достаточно выучить JavaScript и прочитать 10 страниц документации Node.js. Я полагаю, если вы никогда прежде не сталкивались с программированием, то за 5-6 месяцев можно освоить все что необходимо и стать полноправным членом команды.
Андрей Мелихов: мне кажется, рынок сейчас остро нуждается в грамотных сильных разработчиках с бэкграундом из других языков

Андрей Мелихов, программист-эксперт в компании «Яндекс.Деньги», ведущий подкаста «Девшахта»
— Почему стоит изучать Node.js и обратить внимание на бэкенд-JS?
— Как бы не хотели многие, сайты всё ещё требуют серверного рендеринга. Это не только SEO-задачи, но и мобильный трафик. Если мы не хотим усложнять себе жизнь и используем один и тот же код на сервере и клиенте, то наш практически единственный выбор — это JavaScript. Конечно, есть и различная экзотика, компилируемая в JS, но, за исключением TypeScript, всё это пока достаточно сложно воспринимать серьёзно. Итак, нам нужен JS на сервере, и тут основной игрок — Node.js. Да, стоит напомнить, что есть и другие решения, позволяющие исполнять JS за пределами браузера, но на фоне Node.js их доля незаметна.
Это первое. Второе — в какой-то момент приходит необходимость работать с данными, хранимыми на сервере. Мне кажется, что любой веб-разработчик хотя бы на базовом уровне должен понимать, как это всё устроено. И здесь Node.js отличный выбор, он позволяет создать полноценный веб-сервер с минимальным порогом вхождения.
Третье. Несмотря на все насмешки и недоверие, Node.js дорос до состояния практически взрослого инструмента и продолжает развиваться. Сегодня мы наконец-то имеем приличный инструментарий, статическую типизацию и даже один хороший фреймворк (Nest). Можно смело рекомендовать Node.js в качестве серверного решения для больших долгоживущих нагруженных проектов.
— Какие перспективы у языка и технологии?
— Если говорить именно о языке, то мы видим, что JS постепенно становится целью сборки, а не языком, на котором пишут код. И в случае Node.js главная причина тут TypeScript, так как в отличие от браузера нам не нужно транспилировать JS в JS — мы полностью контролируем среду исполнения. Однако те возможности, которые нам даёт TypeScript, гораздо больше, чем просто синтаксический сахар.
И если взять современные инструменты, такие как Nest, то они эти возможности активно используют. Современный проект на Node.js — это статическая типизация, Dependency Injection, паттерны проектирования. Возможно, за этим теряется простота и лёгкость JavaScript, но вместо этого приходит надёжность и упрощение разработки и поддержки в больших проектах.
— Какие перспективы у разработчиков на Node.js? Будут ли они востребованы, какие задачи будут решать?
— Неожиданно, но JavaScript стал языком для всего. Сервер, браузер, мобильные телефоны, десктопные приложения, IoT — везде JavaScript неплохо себя чувствует. Совершенно новым направлением оказались AWS-лямбды (serverless), в которых JavaScript тоже отлично себя проявил. Так что да, разработчики будут востребованы. Но если говорить о сервере, то мне кажется, рынок сейчас остро нуждается в грамотных сильных разработчиках с бэкграундом из других языков.
— Дайте совет новичкам: с чего начать, что изучать, на что обратить внимание?
— Начать стоит с изучения UNIX и в целом основ работы компьютерных сетей. После этого можно попробовать написать простое приложение на Node.js, лучше без фреймворков (в том числе без Express). Поняв, что такое TCP/UDP и HTTP/HTTPS, можно уже попробовать написать полноценный бэкенд на Express, отдающий данные по AJAX и шаблонизирующий HTML. Также, конечно, придётся разобраться с Nginx или HAProxy, понять, что такое балансировка. Очень неплохо хотя бы на минимальном уровне понять, что такое Docker и зачем он нужен.
Следующим шагом я бы порекомендовал погрузиться в TypeScript и попробовать Nest. Неплохим вариантом является изучение связки Angular + Nest, так как Nest создан под сильным влиянием Angular и реализует сходные концепции.
Строго рекомендую книгу Node.js Design Patterns от Mario Casciaro.
Алексей Золотых: на рынке труда не хватает разработчиков на Node.js

Алексей Золотых, тимлид в Infobib, соорганизатор конференции HolyJS
— По вашему мнению, почему стоит изучать Node.js?
— В последнее время Node.js становится все более взрослой технологией. Появляются серьезные инструменты для отладки, трейсинга и выявления других проблем. В сообществе накапливается экспертиза. Движение в сторону микросервисов нивелирует недостатки в отсутствие статической типизации путем уменьшения сложности. И да, для больших проектов у нас все еще есть TypeScript.
Думаю, что у Node.js точно есть будущее, и точно есть куда расти. Вместе с тем порог входа очень низкий. Это позволяет не думать про технологии и сложность, а просто сосредоточиться на продукте.
— Какие перспективы у бэкенд JavaScript по сравнению с другими языками и технологиями?
— Я изначально против привязки к технологиям. Хороший инженер должен выбирать технологию под задачу а не пытаться быть парнем с молотком, для которого все вокруг гвозди. На данный момент у ноды приличная скорость в некоторых аспектах, низкий порог входа, высокая популярность и куча библиотек для всего. С другой стороны, не решены многие вопросы. Но думаю, что это звучит как вызов 😉
— Сколько времени нужно учиться бэкенд-разработке на JS с нуля до джуниора?
— Все индивидуально. Если вы любопытны и въедливы, то думаю, что не менее полугода.
Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях