Сейчас начнется: "ай-я-яй, холивар, фреймворков куча, бери любой!"
Но что-то мне кажется, что под мои запросы получится найти от силы 1 фреймворк. И поэтому холивара не будет.
И это даже несмотря на то, что меня интересуют решения хоть на базе React, хоть Vue, хоть Svelte, хоть что-то еще.
Вот запросы:
- Фреймворк должен быть создан взрослыми людьми, которые не играют в игрушки. Вот разработчики Next.js играют в игрушки, они сделали свой компилятор JavaScript, и используют его вместо Babel, чтобы собиралось быстрее. Ну вот что бы вы сказали мне, если бы я спросил у вас, стоит ли мне сделать свой компилятор JavaScript? А почему им можно? Я так не считаю. Мне чисто психологически противно, что они не только не сделали сам фреймворк удобным, но и вместо этого потратили кучу человеко-часов на малонужную ерунду.
- Фреймворк должен давать полноценный бек-енд, чтобы делать на нем не только SSR, но и API. И не требовалось всяких koa, express и проч. Весь этот функционал должен быть в нем самом. И библиотеки для него должны быть, сессии, роутеры, авторизашки в соцсетях, туда-сюда. В Next это есть, но опять же, оно... оно убогое. Next.js - это фреймворк от Недоделкина.
- Нужна возможность создать глобальную переменную, доступную и из SSR, и из API. В Next ее нет.
- Нужна возможность сделать в бек-енде сервисы, которые будут крутиться в фоне постоянно. В Next она есть, но убогая, и в этих сервисах JS идет напрямую, мимо компилятора, поэтому никаких `import` и прочего. Извращение.
- При переходах между страницами должно быть можно показывать прелоадеры. Полноценные прелоадеры. Вот нажал кнопку, и вместо контента появился прелоадер (только вместо контента! меню, сайдбар и все что можно - осталось), затем грузятся данные через SSR (как и если бы открыл страницу в новой вкладке), затем они рендерятся вместо прелоадера. Вернее, даже не так - сначала грузятся данные, потом оно смотрит, ага, не прошло и N мсек, а данные уже загрузились - значит не надо рендерить прелоадер (а то мигание получится), а надо сразу данные.
- Нормальный удобный роутер (не путать с роутерами API). В Next ты должен сам конструировать URL, затем делать
router.push(url)
. В современном JS же есть URL, все бы ничего, но... тот URL требует наличие хоста, протокола, да и вообще не очень удобен.
- Нормальный component-level CSS. Вот опять, в Next он есть. Но в него не получится добавить стили для компонентов из сторонних библиотек, которые не предоставляют кастомизации через className ит.п. А такая возможность часто нужна.
- Вообще, при переходе с "велосипеда" или какого-нибудь старого решения для SSR, должно происходить ускорение и уменьшение веса, а не наоборот. В Next.js есть такая фича, как prefetch JavaScript-бандлов. То есть открываешь
/
и у тебя сразу со всех страниц скрипты грузятся. Ну такое себе. И в полной мере это не отключается. Приходится делать аж свой компонент <Link>
вместо штатного.
- И, как ясно из пунктов 7 и 8, разработчики нормального фреймворка не должны иметь проблем с мыслительной деятельностью, в отличие от разработчиков Next.js. Или им просто лень? Или они думают, что простые обрубленные решения = багов не будет? Ошибаются: я совсем недолго с Next.js, а баг в одной из версий уже словил. А лучше, чтобы багов не было, или хоть пореже, что ли.
Не могу сказать, что все эти проблемы Next.js никак не обойти. Многое можно закостылить. Но это уже становится мало похоже на Next.js. А скорее на разработку своего собственного фреймворка. И удобнее это делать, форкнув Next.js и внося изменения прям туда. Это нормально - брать фреймворк и дорабатывать? Ёшкин кот!
Ну и кратко о себе: я работаю не в команде, а один, работы у меня очень много, и именно поэтому нужно, чтобы все делалось легко и просто. А Next.js просто бесит.