Найти тему
КиберНиндзя

Движки сайта на Javascript (NodeJS): что сейчас в тренде

Оглавление

Привет, друзья!

Сегодня хочу в кратце осветить тему CMS (content management system) в экосистеме NodeJS (серверный Javascript). Т.е. движков и технологий, которые используются для быстрого поднятия сайта и управления его содержимым.

Например, в экосистеме PHP на момент написания статьи список пятерка лидеров в ru-сегменте выглядит так: Wordpress, Bitrix, Joomla, Opencart, Drupal.

Сам я - fullstack-разрботчик на PHP (специализируюсь на всех вышеназванных + еще с десяток). Но меня очень привлекает архитектура NodeJS и экосистемы, связанной с ней. Не считая билдинга фронта, несколко лет назад построил сайт на KeystoneJS (NodeJS + ExpressJS + MongoDB), но на тот момент тема полнофункционального сайтостроения на NodeJS была не слишком распространена, и многие проекты тогда находились в начальном этапе своего развития. Сейчас же они разрослись как на дрожжах, поэтому я посвятил несколько дней их исследованию, и хочу поделиться своим мнением на их счет. NodeJS на мой взгляд - очень недооценная среда и имеет огромный потенциал, который нужно уметь применить, причем не только во фронтенде, но и для бэкенда.

Итак, первое, что меня удивило после опыта fullstack-PHP - это то, что большинство современных NodeJS-CMS являются исключительно headless-системами. Т.е. они представляют из себя интерфейс к БД и предоставляют средства для управления данными, но не имеют почти ничего для вывода этих данных на фронт, это полностью оставляется на откуп разработчикам. Здесь очень четко прослеживается тенденция - практически все поставщики этих CMS продают их детище помимо opensource-варианта как SaaS (т.е. готовую предустановленную облачную backend-систему).

Заранее оговорюсь, что я не сторонник такого подхода, на мой взгляд эта технология не облегчает, а наоборот - усложняет цикл разработки. Если вы тоже - можете смело пролистывать ко второй половине статьи.

Наиболее развитые и популярные из них на момент написания статьи следующие.

Ghost

Сайт: https://ghost.org

От разработчиков из команды Wordpress. Примечательно, что поднялась благодаря kickstater-у, благодаря которому собрала почти £200000 в 2013-м году.

Позиционируется как блог-платформа. Судя по статистике github - наиболее популярная из среды NodeJS на момент написания статьи.

Представляет из себя платформу на NodeJS, использующую БД MySQL и предоставляющую интерфейс для управления статьями и возможность создания своих типов данных.

Интерфейс и общий подход действительно напоминает Wordpress, та же знакомая система публикации постов из коробки, магазин с кучей платных тем. И хоть Ghost и позиционируется как Headless, штатно предлагает средства шаблонизации на базе handlebars. Впрочем, штатно имеются связки с Vue (Nuxt), React (Next) и др.

Возможно я бы и заинтересовался глубже этой системой, если бы не одно НО. Во-первых, Ghost работает исключительно с MySQL, но полноценной поддержки MySQL 8 не было аж до середины 2020-го (по крайней мере судя по Issues в репозитории). Как-то запаздывает их поддержка единственной БД, на которую они ориентированы.

Кроме того, по скорости развертывания, от своего прародителя Wordpress эта система достаточно далека. Сайт из коробки просто так не заведется, очень многое придется создать руками (особенно если вы не хотите использовать handlebars в качестве шаблонизатора).

-2

Factor

Сайт: https://factor.dev

Еще одна headless-CMS (но с набором готовых тем для фронтенда). Предоставляет интерфейс для управления данными в бэкенде без привязки к фронтенду, позиционирующая себя также как альтернатива Wordpress.

Для фронта в первую очередь ориентирована на Vue, но возможна связка и с другими движками. В качестве базы выбрана MongoDB.

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

Завести удалось только после хороший плясок с бубном и углублением в исходники. Но одно это уже само по себе привило неприязнь к Factor. Я в целом отрицательно отношусь к продуктам, создатели которых не уделяют должного внимания документации. Кстати, еще один забавный факт - это единственная CMS, доступ к документации которой возможен исключительно для зарегистрированных на их сайте пользователей.

Хотя система и имеет некоторое количество встроенных полезных плагинов, но лично мне она не принесла удовольствия от вхождения в нее и использования.

-3

Strapi

Сайт: https://strapi.io

И снова headless. На этот раз кристально чистая headless, не имеющая никакого предпочтения относительно фронта. Gatsby, React, Vue, Nuxt, Nuxt, Next, Angular - вожно выбрать все что угодно. Отчасти потому, что никакого родного фронтенда Strapi не имеет. По-быстрому сваять и запустить сайт, базируясь на какой-нибудь выбранной теме не получится, все придется прорабатывать практически с нуля. К базам точно также не привередлива, поддерживает широчайший набор из PostgreSQL, MongoDB, SQLite, MySQL (к слову, это действительно самый большой выбор по сравнению с любым другим движком на NodeJS).

Создатели повторяют общую моду и во всем сравнивают себя с Wordpress. Но лично я, честно, искренне удивлюсь, если какой-нибудь блоггер, желающий просто вести блок, выберет не WP, а именно это тернистое решение, в котором ему прежде придется стать полноценным программистом.

-4

KeystoneJS

Сайт: https://www.keystonejs.com

Сейчас актуальной считается 5-я версия. При переходе к ней, создатели легким росчерком пера закинули в дальний ящик абсолютно все предыдущие наработки. До 4-й версии она представляла из себя полноценную fullstack-CMF из NodeJS+ExpressJS+MongoDB с удобной админкой, но к 5-й версии от нее осталась только админка и больше ничего... Авторам конечно виднее, куда они держат путь, но на мой взгляд это деградация. И говорю я это потому, что в свое время, несколько лет назад, плотно поработал с KeystoneJS 4, и на тот момент она была по истине универсальной и очень удобной для использования. Для разработчиков PHP - примерно тоже самое, как если в коробке совместить Yii/Symfony/Laravel/Zend/ с готовой удобной админкой для управления всеми моделями. Но, видно, разработчикам надоело поддерживать всё и вся, и они решили сосредоточиться исключительно на админке.

Интересной особенностью является использование GraphQL для построения запросов и встроенная админская песочница для их наглядного графического редактирования "на лету".

Прочие подобные решения рассматривать не буду, т.к. они либо хоть и были перспективными и функциональными на старте, но заброшены на данный момент и врядли будут развиваться (EnduroJS), либо являются очередными чистыми headless (buttercms и т.п.). Можно было бы конечно рассмотреть и такие решения, как MeteorJS, но, на мой взгляд, для поточного сайтостроения они не слишком годятся и больше направлены на крупное enterprise.

По перечисленному уже можно увидеть явный тренд на headless. Хорошо ли это? На мой взгляд - нет. Как fullstack-разработчик я вижу в них не более, чем СУБД (как напр. phpmyadmin или adminer). Средство для работы с БД с небольшими рюшечками для облегчения работы с контентом. Т.е. в коробке имеющие СУБД с немного расширенным провайдером к БД. Такая концепция совершенно не сочетается с лозунгами, которыми пестрят их сайты. Не спорю, в некоторых случаях это действительно предпочтительнее, например при жестком разделении на backend и frontend в крупных корпоративных проектах (хотя, все же, здесь есть с чем поспорить). Но для целой сферы ecommerce (т.е. для разворачивания полноценных интернет-магазинов) не подходят от слова совсем. К тому же, на звание полноценной CMS после эры соответствующих PHP/Ruby/Python-систем они не тянут, т.к. слишком дословно воспринимают это понятие (только управление контентом, и больше ничего).

-5

ApostropheCMS

Сайт: https://apostrophecms.com/

В процессе копания среди этой армады безголовых систем я наткнулся на удивительный самородок - ApostropheCMS. Он вышел из-под пера разработчиков PNG и GD Library, а если точнее, Томаса Бутелла. Конечно, сфера графики несколько далека от CMS/CMF, но отмеченные наименования сами по себе так и просили уделить внимание этой системе. И она действительно интересна.

Работает на экосистеме из NodeJS+ExpressJS+MongoDB (в следующей версии в связку также вольется VueJS). Штатно имеет удобный админский интерфейс для управления страницами и контентом (причем, что самое интересное, сделанный не отдельной админкой, а появляющийся как элементы управления и редактирования прямо поверх страницы), набор плагинов для формирования мультисайтовости, ведения блога, командной работы. И, как можно было ожидать, множество инструментов для работы с картинками (начиная от банального масштабирования, до специфического редактирования и даже готового плагина для встраивания набора из загруженных картинок в виде карусели в любое место сайта буквально парой кликов).

В отличие от всех перечисленных выше систем, является как полноценной CMS, так и CMF, и при этом действительно подходит для быстрой развертки сайтов. За пару минут можно получить действующий прототип, из которого быстро слепить почти все что угодно. Разве что для ecommerce не сгодится, т.к. ввиду не слишком большой распространенности не имеет средств интеграции практически ни с какими соответствующими сервисами. Но для ведения блогов, каталогов, корпоративных сайтов или уж тем более лендингов или визиток, ApostropheCMS - более чем достойное решение.

Также, для любителей трендов, этот движок сразу же может выступить и как headless-система, для этого в ней все готово.

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

Подписывайтесь и следите за новостями, если хотите знать больше.