Дэн Абрамов написал на GitHub развёрнутый комментарий, к которому можно отправлять теперь всех, кто спрашивает «а что не так с Create React App»? Особенно порадовало, что тезисы в целом совпадают с моими, которые я недавно не публично озвучивал в ответ на очередной боллерплейт поверх CRA.
TL;DR
Основная проблема CRA в том, что он обеспечивает только клиентский рендер. Никаких префетчингов данных, никакого SSG и SSR в нём нет, как и нет умного разделения бандла на чанки с часто и редко обновляемыми кусочками. CRA создавался как инструмент для быстрого старта с zero-конфигурацией, но требования к современным приложениям иные.
"However, it doesn't meet the original goal of being the best way to create a React app anymore."
Даже если отбросить в сторону вопрос SSR/SSG (не всем нужно SEO, да и можно прикрутить костылик на папетире), у нас всё равно остаётся вопрос водопада сетевых запросов: скачали бандл, отрендерили компоненты, сфетчили данные, отрендерили следующий набор компонентов. Печалька.
Несколько раз Дэн подчёркивает, что реакт это библиотека, а не фреймворк (React itself is only a library). В нём нет высокоуровневых механизмов работы с данными (интересно, что иногда в ответах на проблемы от команды Реакта проскальзывает «возьмите хороший инструмент с кэшом»). В нём нет роутера, кэшей, серверной части и т.д. Он не диктует правила, он предоставляет инструменты.
Какой же видится выход? Создавать «эталонный» фреймворк у команды нет ни желания ни ресурсов. Выбирать один из имеющихся на рынке за эталон не хочется. Совсем депрекейтить CRA тоже не вариант — хочется всё же поставлять какой-то CLI из коробки. Да и нужно сохранить актуальность для кучи ранее созданных обучающих материалов.
В итоге Дэн предлагает рассмотреть вариант, что CRA превращается в лончер, который позволяет создать базовое приложение на любом популярном react-фреймворке: Next, Remix, Гэтсби или простенький шаблон на Vite.
И, конечно, интересно, что этот комментарий родился в ответ на предложение перевести документацию для новичков с CRA на Vite, потому что CRA безнадёжно отстал от прогресса. Давно пора!
TL;DR
Основная проблема CRA в том, что он обеспечивает только клиентский рендер. Никаких префетчингов данных, никакого SSG и SSR в нём нет, как и нет умного разделения бандла на чанки с часто и редко обновляемыми кусочками. CRA создавался как инструмент для быстрого старта с zero-конфигурацией, но требования к современным приложениям иные.
"However, it doesn't meet the original goal of being the best way to create a React app anymore."
Даже если отбросить в сторону вопрос SSR/SSG (не всем нужно SEO, да и можно прикрутить костылик на папетире), у нас всё равно остаётся вопрос водопада сетевых запросов: скачали бандл, отрендерили компоненты, сфетчили данные, отрендерили следующий набор компонентов. Печалька.
Несколько раз Дэн подчёркивает, что реакт это библиотека, а не фреймворк (React itself is only a library). В нём нет высокоуровневых механизмов работы с данными (интересно, что иногда в ответах на проблемы от команды Реакта проскальзывает «возьмите хороший инструмент с кэшом»). В нём нет роутера, кэшей, серверной части и т.д. Он не диктует правила, он предоставляет инструменты.
Какой же видится выход? Создавать «эталонный» фреймворк у команды нет ни желания ни ресурсов. Выбирать один из имеющихся на рынке за эталон не хочется. Совсем депрекейтить CRA тоже не вариант — хочется всё же поставлять какой-то CLI из коробки. Да и нужно сохранить актуальность для кучи ранее созданных обучающих материалов.
В итоге Дэн предлагает рассмотреть вариант, что CRA превращается в лончер, который позволяет создать базовое приложение на любом популярном react-фреймворке: Next, Remix, Гэтсби или простенький шаблон на Vite.
И, конечно, интересно, что этот комментарий родился в ответ на предложение перевести документацию для новичков с CRA на Vite, потому что CRA безнадёжно отстал от прогресса. Давно пора!