Node.js как среда выполнения JS

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:

  1. обеспечивать создание серверных приложений, в т. ч.:
    • взаимодействовать с устройствами ввода-вывода через API, написанный на C++;
    • подключать другие внешние библиотеки, написанные на разных языках, передавая вызовы к ним из JavaScript-кода;
  2. разрабатывать десктопные оконные приложения (при помощи NW.js, AppJS или Electron для Linux, Windows и macOS);
  3. программировать микроконтроллеры (например, 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:

  1. MEAN - включает  базу данных MongoDB, фреймворки Express.js и AngularJS, технологию Node.js;
  2. MERN - в качестве фронтенд-фреймворка используется React;
  3. 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 - настройки по умолчанию, для быстрой инициализации).

Пример простейшего файла package.json

[свернуть]

Строковые значения в файле package.json (например, "js", "javascript") должны заключаться в парные кавычки "_", при одинарных '_' терминал покажет ошибку.

Файл package.json :

  • выводит список пакетов, от которых зависит ваш проект (перечисляет зависимости);
  • определяет версии пакета, которые могут использоваться в проекте, руководствуясь правилами семантического управления версиями;
  • обеспечивает воспроизводимость сборки, и таким образом облегчает ее совместное использование с другими разработчиками.
Типы зависимостей в файле 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

  1. Validator — проверка и очистка строковых данных.
  2. Lodash — упрощает работу с массивами, числами, объектами, строками (читай также "Lodash (underscore) — знай свою стандартную библиотеку").
  3. RequireJS - реализует формат AMD (Asynchronous Module Definition), что обеспечивает соответствие модулей CommonJS среде браузера (поддерживает асинхронную загрузку).

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.