Обзор бэкенд фреймворков Node.js
16 мая 2021 г. • ☕️ 5 мин.
В Node.js есть большое количество HTTP фреймворков для построения бэкенда с бизнес логикой, классический MVC или REST API. Какие из них стоит использовать? Какие стоит обходить стороной?
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 - то, что не попало в опрос
Есть и другие известные фреймворки, не попавшие в опрос, но точно достойные внимания.
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.
Знаете фреймворки не перечисленные здесь? Какой фреймворк считаете лучшим? Пишите в телеграм группе.