Сегодня мы публикуем перевод материала, автор которого хочет рассказать о самых популярных в наши дни фреймворках для Node.js. В этот список входят Sails.js, Hapi.js, NestJS, LoopBack, Derby.js, Mean.io и Total.js.



Sails.js



Sails.js можно считать самым популярным фреймворком для разработки приложений реального времени, основанном на шаблоне проектирования MVC. Он был выпущен в 2012 году под лицензией MIT. Это — бесплатный опенсорсный проект, написанный на JavaScript, подходящий для разработки кросс-платформенных веб-приложений. Он был создан, преимущественно, для разработки бизнес-приложений и приложений, реализующих некий особый функционал. Вот некоторые важные факты об этом фреймворке:

  • Обычно он применяется для реализации API, определяемых данными. Такой подход используется для создания таких приложений, как чаты реального времени, различные панели управления, игры.
  • Он хорошо совместим с самыми разными средами и технологиями для разработки интерфейсов приложений. Например, его можно использовать для разработки приложений, рассчитанных на платформы Android и iOS, с ним хорошо сочетаются библиотеки Angular и React. Это говорит о том, что разработчик, выбравший Sails.js, сможет интегрировать его практически в любой процесс разработки приложений.
  • Он поддерживает модули Grunt, такие, как LESS, SASS, Stylus, CoffeeScript, Pug (ранее — Jade) и Dust. Как результат, Sails.js идеально подходит для разработки браузерных приложений.
  • В него интегрирована ORM-библиотека waterline.js, благодаря чему он поддерживает универсальные средства для работы с различными видами баз данных, протоколов, сторонних API. Это облегчает взаимодействие с различными системами хранения данных.
  • В нём, для управления HTTP-запросами, используются возможности библиотеки Express.js.
  • Этот фреймворк широко используется при разработке веб-сайтов. Например, на его основе создан сайт компании Verizon. Ещё один пример его применения — сайт футбольной команды Detroit Lions.

Hapi.js



Hapi.js — это опенсорсный легковесный и высокопроизводительный фреймворк, предназначенный для разработки веб-приложений. Он создан силами команды Walmart Labs под руководством Эрана Хаммера. При проектировании фреймворка в расчёт принималась необходимость обеспечения работоспособности веб-проектов в ходе распродажи, которую Walmart устраивает в чёрную пятницу. В США в дни этой распродажи системы интернет-коммерции испытывают огромные нагрузки.

Изначально в Hapi был использован фреймворк Express, но оказалось, что ему сопутствует слишком много ограничений, из-за которых проект, основанный на нём, не соответствовал требованиям, предъявляемым к нему. В результате команда Walmart создала Hapi в виде самостоятельного фреймворка. Вот его основные особенности:

  • Hapi.js позволяет создавать статические веб-сайты, он имеет встроенную поддержку таких СУБД, как MySQL, MongoDB и PostgreSQL.
  • Этот серверный фреймворк хорошо сочетается с любыми библиотеками для разработки интерфейсов, такими, как React, Angular и Vue.js.
  • Проект, основанный на Hapi.js, может быть реализован в виде API-сервера, сервера, поддерживающего веб-сайт или HTTP-прокси.
  • Его можно использовать для разработки RESTful-приложений и веб-приложений реального времени, а также — для создания сервисов.
  • Он весьма популярен и используется в крупных проектах. В частности, речь идёт о сайтах компаний Disney, Concrete, PayPal, Walmart и многих других.

NestJS



NestJS — это серверный фреймворк для разработки приложений, который можно считать новичком в списках инструментов для Node.js. Его считают отправной точкой путешествия в мир современных концепций проектирования веб-приложений, таких, как микросервисные архитектуры, Event Sourcing и Domain Driven Design. Этот фреймворк создавали с учётом поддержки серверных скриптов и возможности создания с его помощью серверных приложений.

Весьма интересной возможностью NestJS является поддержка TypeScript — подмножества JavaScript. Среди основных особенностей этого фреймворка можно отметить следующие:

  • Модульная структура, использование которой упрощает разделение проекта на отдельные блоки. Она облегчает использование в проектах внешних библиотек.
  • NestJS содержит встроенный DI-контейнер.
  • Он поддерживает модульную организацию проектов, которые строятся в соответствии с принадлежностью каждой логической части проекта (модуля) определённой предметной области.
  • Использование NestJS упрощает тестирование благодаря поддержке таких возможностей, как DI-контейнеры и модули.
  • Фреймворк позволяет создавать расширяемые программные решения, между компонентами которых отсутствует сильная связь.

LoopBack



LoopBack — мощный фреймворк, содержащий встроенные средства для работы с API, что упрощает подключение проектов, основанных на нём, ко множеству серверных ресурсов. Этот фреймворк разработала та же команда, которая занимается работой над Express.js. Стоит отметить, что LoopBack поддерживает неплохой набор СУБД различных производителей.

Этот фреймворк, благодаря его мощным возможностям, был выбран командой DA-14 в качестве основы проекта Cosmunity (социального приложения). LoopBack применяется известным доменным регистратором и хостинг-провайдером GoDaddy, им пользуется разработчик систем компьютерной безопасности Symantec. Отметим некоторые особенности LoopBack:

  • Фреймворк поддерживает возможность разбора определений моделей данных, упрощает проектирование новых RESTful-API, что оказывает помощь разработчикам при установке предопределённых ролей на уровнях пользователя и приложения.
  • Благодаря использованию возможностей NPM он позволяет создавать динамические API.
  • С использованием динамических API может быть значительно улучшена производительность динамических серверных приложений.
  • Фреймворк предлагает множество дополнительных компонентов для управления файлами, для организации входа пользователей в систему силами сторонних проектов, для использования OAuth2, провайдеров хранения данных и так далее.
  • LoopBack-приложения можно разворачивать как на традиционных серверах, так и в облачных средах.
  • Совместно с этим фреймворком можно использовать различные средства разработки интерфейсов приложений, например — Angular и SDK для Android и iOS.
  • LoopBack имеет инструменты командной строки для создания REST-API с использованием, средства исследования API, поддерживает модели, основанные на специфических схемах данных.
  • Он позволяет быстро подключать приложения, работающие на мобильных устройствах и в браузерах, к источникам данных и к сервисам.
  • Он упрощает настройку авторизации и аутентификации пользователей.

Derby.js



Derby.js можно описать как fullstack-фреймворк, основанный на шаблоне MVC и широко используемый при разработке современных веб-приложений. С его помощью можно разрабатывать и серверные и клиентские приложения. Его, в основном, используют для создания мобильных приложений и веб-приложений реального времени.

Изначально Derby.js поддерживал лишь ограниченное количество стандартных Node.js-модулей. Но теперь его возможности легко можно расширять сторонними модулями, что способствует проектированию и разработке качественных проектов. Вот некоторые характерные особенности этого фреймворка:

  • Благодаря Racer — встроенной в Derby.js подсистеме синхронизации данных, разработчик может воспользоваться возможностями параллельной обработки и синхронизации данных между браузерной частью приложения, его серверной частью и базой данных. То же самое касается и синхронизации клиента и сервера в более общем смысле.
  • Фреймворк позволяет организовывать код в виде компонентов с использованием HTML-шаблонов, которые удобно использовать при проектировании приложений.
  • Вокруг него сложилось активное сообщество разработчиков, что означает возможность получить ответ на некий сложный вопрос о Derby.js, не раскрытый в документации и в существующих публикациях.
  • Благодаря поддержке серверного рендеринга этот фреймворк позволяет создавать высокопроизводительные веб-проекты, страницы которых загружаются в браузеры пользователей очень быстро и хорошо индексируются поисковыми системами.

Mean.io



Mean.io — это ещё один fullstack-фреймворк — бесплатный, опенсорсный и мощный, который используется для разработки динамических сайтов и веб-приложений. Он включает в себя все четыре компонента стека MEAN — MongoDB, Express.js, Angular и Node.js. Помимо этих компонентов в него входят и другие важные для веб-разработки инструменты, такие, как Babel и GraphQL. Фактически, речь идёт о том, что этот фреймворк представляет собой полноценный набор инструментов для веб-разработки. Вот некоторые заметные особенности Mean.io:

  • С его помощью можно разрабатывать приложения любых размеров и любой сложности. Благодаря тому, что в него входят все компоненты стека MEAN, он весьма эффективен и популярен.
  • Существует множество сайтов и веб-приложений, созданных на базе Mean.io.
  • Он включает в себя практически всё, что нужно для того, чтобы приступить к разработке веб-проекта.

Total.js



Total.js — это серверный фреймворк, основанный на шаблоне MVC. Он очень хорошо подходит для разработки веб-приложений. Если говорить об использовании этого фреймворка совместно с другими технологиями, то можно отметить его гибкость и хорошую совместимость с большинством из существующих систем управления базами данных. Среди них — MongoDB, MySQL, PostgreSQL и другие.

Total.js, кроме того, совместим с инструментами для разработки интерфейсов, с такими, как React, Ember и Angular. Вот некоторые особенности этого фреймворка, на которые стоит обратить внимание:

  • Он позволяет, без использования зависимостей, создавать серверные и клиентские приложения.
  • Фреймворк экономичен, не требует высокой вычислительной мощности и больших объёмов памяти, хорошо показывает себя на ARM-устройствах.
  • Поддерживает работу с событиями (речь идёт о технологии WebSocket и о событиях, посылаемых сервером).
  • Поддерживает отправку электронных писем с использованием SMTP, средства локализации, стриминг медиа-данных, средства визуализации данных, темы.
  • Подходит для быстрой разработки проектов, весьма стабилен и высокопроизводителен, требуя, в сравнении с другими сопоставимыми с ним фреймворками, меньше ресурсов.
  • Поддерживает различные схемы маршрутизации (классическую, динамическую, основанную на регулярных выражениях), и, кроме того, позволяет разработчику создавать собственные маршруты для обработки динамических данных, файлов или событий WebSocket.

Итоги


В этом материале мы рассмотрели несколько популярных Node.js-фреймворков. При выборе фреймворка для конкретного проекта стоит учитывать следующие факторы:

  • Качество документации.
  • Сообщество.
  • Состояние проекта на GitHub, скорость исправления ошибок.
  • Набор задач, для решения которых обычно используется фреймворк.
  • Гибкость решения.
  • Сложность системы.
  • Совместимость фреймворка с другими инструментами, которые планируется использовать.

Уважаемые читатели! Какими Node.js-фреймворками вы пользуетесь и почему выбрали именно их?

Комментарии (20)


  1. staticlab
    30.11.2018 12:42

    TypeScript — подмножества JavaScript

    TypeScript, which is a superset of JavaScript

    Супермэн — не сверхчеловек, а недочеловек? :)


    1. DenimTornado
      30.11.2018 17:51

      Подчеловек же!


      1. roodz
        01.12.2018 10:29

        Надмозг


    1. JPEG
      01.12.2018 12:17

      Да, они себя называют надмножеством. С точки зрения синтаксиса тайпскриптисты правы, да, распарсить тайпскрипт может и обычный яваскрипт и добавленный аннотации. А вот с точки зрения семантики, увы, не всякая программа на яваскрипте валидна в тайпскрипте, а наоборот — пожалуйста (только аннотации вырезать).


      Вот если б тайпскрипт поддерживал все финты (ну, разве что исключая eval) и добавлял какой-нибудь рантайм, то стало бы TS > JS. А пока теория множеств на стороне старого не очень доброго яваскрипта.


      1. Hellfireman
        01.12.2018 22:35

        не всякая программа на яваскрипте валидна в тайпскрипте


        Насколько я знаю, абсолютно любой валидный JS код является валидным TS кодом. Другое дело, что компилятор может ругаться на какие-нибудь типы (но всё равно скомпилирует и сделает свой output, то есть будут скорей warnings, а не errors).

        Если у Вас есть пример JS кода, не являющегося валидным TS, прошу привести.


  1. de1m
    30.11.2018 14:42

    Может быть вопрос несколько не в тему. Очень часто (почти всегда) говоря про node.js подразумевают веб разработку и её окружение. А есть проекты на node.js не связанные с веб?
    Я просто к тому, что я на ноде пишу консольные программы и всё на удивление хорошо и удобно работает


    1. WaXe
      30.11.2018 14:56

      Тут вроде как ведут список: https://github.com/sindresorhus/awesome-nodejs
      мб что интересное для себя найдете


    1. Alex_Crack
      30.11.2018 15:38

      У нас один из проектов заточен под smpp-протокол (масло масляное). Под капотом node.js, RabbitMQ. Крутится с два десятка демонов.


    1. alemiks
      30.11.2018 18:22

      >А есть проекты на node.js не связанные с веб?
      тыщи их electronjs.org/apps. Из самых известных и крупных — Visual Studio Code, Atom, Slack


  1. RaShe
    30.11.2018 17:53

    Для api есть koajs, простой и легковестный.


    1. dos
      01.12.2018 20:48

      Жаль что не очень быстрый. www.fastify.io поудачней будет


      1. JPEG
        01.12.2018 12:31

        Как и следовало ожидать, они сравнили колбеки с промисами. Спорно. Если мне и потребуются 33000rps, то уж я тогдо лучше возьму голый сокет и стану напрямую слать буферы.


        А вот валидация запросов / ответов у них прикольная, спасибо за наводку!


  1. wert_lex
    01.12.2018 20:19

    А вот мне интересно, существуют реальные люди или компании, которые вот прям что-то взрослое и серьезное держат в продакшне на sails или loopback?


    Заранее объяснюсь. Года три назад переносил проект c loopback. Такого насмотрелся, что волосы в самых интимных местах зашевелились.
    Про waterline orm из sails слышал схожие отзывы.


    1. dos
      01.12.2018 20:51

      есть… sails ужасен, waterline ещё хуже…


  1. OnYourLips
    01.12.2018 21:59

    Категорически не понимаю, почему любят в один комок лепить ORM и HTTP библиотеки/фреймворки.
    Причем грешат этим большинство, и не только в JS мире.

    А в некоторых случаях еще и админпанель для такой комбинации входит в состав фреймворка. Зачем? Почему?


    1. Zoolander
      01.12.2018 00:21

      как пишет Роберт Мартин, авторам фреймворка интересно привязать вас ко всему, им очень интересно, что вы внедрите фреймворк во все слои своей архитектуры и будете зависеть от него во всех областях. Но взамен вы не получите никаких обязательств, ведь автор фреймворка может в любой момент сломать совместимость с обратными версиями и вы будете чертыхаться, переписывая все слои, от админки до работы с базы данными

      Особенно няшно смотрятся еще фреймворки, которые до кучи вставляют в себя утилиты для работы со строками, массивами и тд. Поясняю: к примеру, есть такой движок Phaser для разработки игр на HTML5/JS. В нем есть свой набор утилит для работы с массивами, ну там взять выборку, отсортировать и прочее. У меня был очень большой соблазн использовать эти утилиты в блоке логики. К счастью, я воздержался и не зря — скоро вышла третья версия, в которой нахрен были поломаны все совместимости с предыдущей. Я пересел на третью ради плюшек в графическом движке. Но если бы я использовал утилиты для работы с массивами — мне пришлось бы переписывать и логику, и вообще кучу классов, где использовались утилиты из предыдущей версии.

      Авторы фреймворков, которые пытаются сделать из себя God framework, словно не осознают, что они создают очень плохой паттерн архитектуры. Фреймворк должен быть модульным, по сути в нем должен соблюдаться принцип единственной ответственности. То есть не берите God framework в работу — наплачетесь потом, когда он сломает совместимость. Берите мелкие, модульные библиотеки, отвечающие за какие-то отдельные области — вью, базы данных, реактивность.


      1. funca
        02.12.2018 00:45

        Микрофреймворки хороши на словах и учебных примерах, объясняющих простые вещи. Но в условиях промышленной разработки команды с ними тратят кучу времени на создание вспомогательного кода, склеевающего одни части с дугими.


        Комплексные фреймворки интересны когда у вас несколько однотипных проектов со схожей инфраструктурой и вы хотите их поддерживать за разумные деньги.


        1. Zoolander
          02.12.2018 11:10
          +1

          да, в реальности приходится любить большие фреймворки

          я не совсем точно выразился, и скорее хотел сказать — «если в фреймворке еще и есть утилиты по работе со строками или массивами, не спешите использовать еще и эту фичу — лучше избегать дополнительных зависимостей».


  1. greeks
    01.12.2018 22:35

    Какими Node.js-фреймворками вы пользуетесь и почему выбрали именно их?

    micro от zeit — легкий, быстрый, простой


  1. constb
    03.12.2018 08:50

    Странно что никто ещё не упомянул Apollo Server – вполне себе самодостаточная штука для написания headless-бэкенда. Если его укомплектовать, например, React + React Apollo – получается нормальное SPA, а если докинуть Next.js или Gatsby – статический сайт с SEO и прочим. Городить огород с шаблонами и jquery-плагинами уже становится как-то и не нужно… Можно и альтернативами воспользоваться из мира ангуляра или vue.js – сам протокол-то достаточно универсален.


    Это конечно не MVC, вообще написание кода как коллекции резолверов, больших и маленьких, требует иной структуры проекта, другого подхода к выборкам данных, да и их хранению тоже. Кэшировать компоненты при SSR в Next.js тоже получается не всегда тривиально, интересная задача…