Howtojs

Обзор бэкенд фреймворков Node.js

16 мая 2021 г. • ☕️ 5 мин.

В Node.js есть большое количество HTTP фреймворков для построения бэкенда с бизнес логикой, классический MVC или REST API. Какие из них стоит использовать? Какие стоит обходить стороной?

Ranking

State of js 2020

Результаты опроса State of js 2020 показывают интересную картину, давайте ее разберем.

Express

Express действительно самый популярный фреймворк, о нём знает любой разработчик Node.js.

Плюсы

  • огромное сообщество
  • множество обучающих материалов
  • множество готовых модулей
  • легко найти знающих разработчиков

Минусы

  • нет дальнейшего развития, разработка стоит
  • используются старые подходы (callbacks в роутере)
  • многие плагины тоже не развиваются и сильно устарели

Next.js

Next.js отличный фреймворк, но ему здесь не место. Его основное назначение рендерить React на сервере и его тяжело назвать полноценным бэкенд фреймворком.

Gastby

Gastby ситуация схожая с Next.js, использовать только если нужны статические страницы на React. Кстати, этот блог сделан на Gastby.

Nuxt

Nuxt тоже самое, что и Next.js, но для Vue, поэтому сразу на вылет.

Koa

Koa хороший фреймворк, в свое время появился, как альтернатива Express и принес современные async/await в бэкенд разработку.

Плюсы

  • хорошее сообщество
  • есть готовые модули
  • можно найти знающих разработчиков
  • легко перейти с Express
  • использование async/await в роутере

Минусы

  • мало обучающих материалов
  • нет активного развития, хотя есть поддержка
  • очень минималистичный, даже роутер надо ставить отдельно
  • не набрал в свое время нужной популярности, поэтому многие разочаровались и стали возвращаться на Express

Nest

Nest фреймворк enterprise уровня с TypeScript из коробки. Он очень похож на фреймворки из мира Java.

Плюсы

  • уже достаточно популярен
  • много готовых модулей
  • продуманная архитектура
  • активная разработка
  • спонсоры
  • хорошо подходит для крупных компаний

Минусы

  • завязан на TypeScript
  • сильно завязан на декораторы, которые до сих пор не являются частью языка
  • нет своего ORM
  • уступает другим в производительности за счет монструозности

Отлично подойдет тем, кто из мира Java/C#/Angular.

Любители rails/django скорее найдут себе что-нибудь более подходящее.

Meteor

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

Hapi

Hapi хороший фреймворк, но не набрал критическую массу в свое время, поэтому скорее мертв, чем жив.

Strapi

Strapi позицианирует себя, как CMS, поэтому будет лишним в этом списке.

Fastify

Fastify та самая темная лошадка, незаслужено последнее место. Имеет огромный потенциал. Не знаете, что взять, берите Fastify.

Плюсы

  • много готовых модулей
  • поддержка современного синтаксиса
  • активная разработка
  • от разработчиков из команды Node.js
  • сделан в духе Node.js и Express
  • опциональная поддержка TypeScript
  • лучшая производительность среди Node.js фреймворков
  • позволяет тестировать без запуска сервера в обход всего HTTP стэка

Минусы

  • пока что, не достаточно популярен
  • нужно перестроить мышление с middleware на hooks

Other - то, что не попало в опрос

Other

Есть и другие известные фреймворки, не попавшие в опрос, но точно достойные внимания.

Adonis

Adonis классический MVC в духе rails. Отличный выбор, если нужно все в одном.

Плюсы

  • ORM из коробки
  • шаблонизатор и множество других модулей из коробки
  • современный синтаксис
  • набирает обороты

Минусы

  • завязан на TypeScript
  • долго разрабатывалась 5 версия
  • много модулей полностью самописные, мало используется существующая npm экосистема
  • странный DI

Sapper

Sapper из той же серии, что и Next.js.

Feathers

Feathers фреймворк живой и имеет свою фанатскую базу, но он очень на любителя. Использовать можно если нравится.

Loopback

Loopback фреймворк enterprise уровня с TypeScript из коробки, хорош, но мало популярен, особенно после выхода Nest. Рекомендую посмотреть в его сторону, как альтернатива Nest.

Deno

Deno это совсем не фреймворк, а альтернатива Node.js. Имеет свою экосистему с фреймворками.

Sails

Sails был популярен во времена Express, создавался, как альтернатива Rails, но прославился своей забагованностью, так как пытался быть слишком гибким. Не думаю, что его стоит использовать. Если есть те, кто его использует и счастлив, отзовитесь.

Polka

Polka более быстрая альтернатива Express с совместимым API. Я бы не брал на крупные проекты, так как совместимость не 100%, откуда могут повылезать проблемы. Хорошо подойдет для экспериментов.

Gridsome

Gridsome из той же серии, что и Gatsby.

tinyhttp

tinyhttp как и Polka, аналог Express.

Итог

На чем стоит остановиться? Зависит от ситуации.

Хочу делать быстрые REST/GraphQL API - Fastify.

Нравится стиль Java/C#/Angular - Nest.

Хочу Rails like MVC фреймфорк и не боюсь рисковать - Adonis.

Хочу Rails like MVC фреймфорк и боюсь рисковать - Rails.

Нравится стиль чистого JavaScript/Node.js - Fastify/Express.

Нравится TypeScript - Fastify/Nest.

У меня кровавый enterprise - Nest/Loopback.

Хочу сделать максимально быстро прототип из готовых модулей - Express.

Сам не знаю, что мне надо. - Fastify.

Знаете фреймворки не перечисленные здесь? Какой фреймворк считаете лучшим? Пишите в телеграм группе.