Node или Node.js
Node или Node.js — это программная платформа, основанная на движке V8 и превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Представляет собой среду выполнения кода на JavaScript, которая позволяет транслировать вызовы на языке JavaScript в машинный код.
Чаще всего эту платформу используют для создания веб-сервисов, требующих интенсивного обмена информацией с пользователями, в том числе, для реализации чатов, систем совместной работы, социальных сетей и т.д. Многие программы, созданные на Node.js, состоят из серверной и клиентской частей. С применением Node.JS приложение, написанное на JavaScript, может обращаться к широкому перечню глобальных объектов, в том числе document или window, к винчестеру и файловой системе пользователя, а также к библиотекам и программным решениям, находящимся на компьютере, что заметно расширяет возможности взаимодействия.
Node.js использует модульную систему, т. е. вся встроенная функциональность разбита на отдельные пакеты или модули - блоки кода, которые могут использоваться повторно в других модулях (подробнее см. Модули в JavaScript).
Документация по платформе Node.JS размещена на сайте https://nodejs.org.
Node.js позволяет JavaScript:
- обеспечивать создание серверных приложений, в т. ч.:
- взаимодействовать с устройствами ввода-вывода через API, написанный на C++;
- подключать другие внешние библиотеки, написанные на разных языках, передавая вызовы к ним из JavaScript-кода;
- разрабатывать десктопные оконные приложения (при помощи NW.js, AppJS или Electron для Linux, Windows и macOS);
- программировать микроконтроллеры (например, tessel, low.js и espruino).
В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом.
Javascript называют “однопоточным”, имея ввиду, что только одна инструкция исполняется в каждый момент времени (подробнее о работе движка JavaScript). Один вызов функции имеет ровно один контекст выполнения, связанный с ним. При этом в каждый момент времени в Javascript активен только один контекст выполнения. Node.JS позволяет нивелировать однопоточность JS: пока Node.js ждет выполнения кода и вызова функции, он может решать какие-то другие задачи (при этом поток в ожидании запроса блокироваться не будет). Таким образом, приложение может обратиться с запросом к базе данных сервера, а пока ожидается ответ, обработать какие-то другие запросы. Это заметно ускоряет обмен информацией с сервером и, как итог, работу браузерного приложения.
Node.js является открытым проектом, исходники которого можно посмотреть на github.com.
Загрузка установочного пакета доступна на официальном сайте https://nodejs.org.
Основные версии Node.js переходят в текущий статус выпуска (Current) на шесть месяцев, что дает авторам библиотек время добавить для них поддержку. По прошествии шести месяцев выпуски с нечетными номерами (9, 11 и т. д.) становятся неподдерживаемыми, а выпуски с четными номерами (10, 12 и т. д.) переходят в статус Active LTS и готовы к общему использованию (подробнее...). Статус выпуска LTS - «долгосрочная поддержка», который обычно гарантирует исправление критических ошибок в течение 30 месяцев. Рабочие приложения должны использовать только версии Active LTS или Maintenance LTS.
Стек MEAN, MERN, MEVN
При веб-разработке на разных уровнях стека могут использоваться разные языки программирования. Однако существуют стеки, использующие всего один язык программирования - JavaScript:
- MEAN - включает базу данных MongoDB, фреймворки Express.js и AngularJS, технологию Node.js;
- MERN - в качестве фронтенд-фреймворка используется React;
- MEVN - в качестве фронтенд-фреймворка используется VueJS.
npm (node package manager)
В состав Node.js входит собственный установщик пакетов npm (node package manager). Установка необходимого пользователю пакета производится при помощи команды:
npm install <packagename>
Все доступные для установки пакеты и их краткое описание выводятся командой:
npm search
Этой же командой можно производить выборочный поиск пакетов.
Инициализация проекта в Node.JS
Для инициализации проекта и создания файла package.json, определяющего настройки проекта (зависимости верхнего уровня от других пакетов, скрипты, название и т.д.), npm запускается в корневой папке проекта командой npm init:
npm init -y (флаг -y - настройки по умолчанию, для быстрой инициализации).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "name": "modules", "version": "1.0.0", "description": "webpack course", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "js", "javascript" ], "author": "NAV", "license": "ISC" } |
Строковые значения в файле package.json (например, "js", "javascript") должны заключаться в парные кавычки "_", при одинарных '_' терминал покажет ошибку.
Файл package.json :
- выводит список пакетов, от которых зависит ваш проект (перечисляет зависимости);
- определяет версии пакета, которые могут использоваться в проекте, руководствуясь правилами семантического управления версиями;
- обеспечивает воспроизводимость сборки, и таким образом облегчает ее совместное использование с другими разработчиками.
В package.json встречаются несколько типов зависимостей проекта:
- dependencies — основные зависимости, которые вы можете использовать и вызывать в коде проекта;
- devDependencies — зависимости разработки;
- peerDependencies — равноправные зависимости, при включении которых в package.json вы сообщаете человеку, устанавливающему ваш пакет, что ему нужна та же зависимость с указанной версией;
- optionalDependencies — это необязательные зависимости (не влияют на удачное завершение всего установочного процесса);
- bundledDependencies — это массив пакетов, которые объединяются с вашим пакетом (если вы хотите использовать стороннюю библиотеку, не входящую в npm, или включить некоторые проекты в качестве модулей).
Файл package-lock.json - это моментальный снимок всего дерева зависимостей проекта, включающий все установленные пакеты, и использующийся исключительно для блокировки зависимостей от определенного номера версии.
- npm автоматически создаст package-lock.json при установке пакетов;
- eсли уже присутствует npm-shrinkwrap.json, то будет использован он (и при необходимости обновлён);
- запуск npm shrinkwrap в случае наличия package-lock.json просто переименует его в npm-shrinkwrap.json;
- когда по какой-либо причине присутствуют оба файла, package-lock.json будет проигнорирован.
Некоторые полезные библиотеки Node.JS
- Validator — проверка и очистка строковых данных.
- Lodash — упрощает работу с массивами, числами, объектами, строками (читай также "Lodash (underscore) — знай свою стандартную библиотеку").
- RequireJS - реализует формат AMD (Asynchronous Module Definition), что обеспечивает соответствие модулей CommonJS среде браузера (поддерживает асинхронную загрузку).