sergeysova
Как же меня сейчас разбомбило!
Итак, почему CRA это отвратительная штука:
- невозможно просто так подключить babel плагины
- заставляет юзать свой eslint-config-react-app, и env ESLINT_EXTEND
- вокруг него есть десятки расширителей rewired, customize-cra, craco…. и всё это работает не очень хорошо и имеет проблемы с обновлениями CRA
- он насильно исправляет tsconfig при запуске (WTF?)
- подключить postcss плагин уже проблема
- env переменные обязаны начинаться с REACT_APP_
Я думаю вы сможете накидать ещё десятки комментариев о проблемах с CRA. Но у меня весь процесс “БЫСТРОГО” старта выглядит так:
1. yarn create react-app my-app
2. исправить все косяки CRA (3-4 коммита)
3. писать немного код
4. понять, что нехватает расширения
5. пытаться жить с craco/rewired+customize-cra
6. получить какой-то баг при обновлении
7. сделать eject и исправить всё что нужно руками
8. переписать все конфиги
Итого, просто на мучения с CRA в сумме уходит несколько рабочих дней и 2000±500 строк изменений. Это неправильно. Такую систему невозможно называть УДОБНОЙ или УПРОЩАЮЩЕЙ. Оно даже для старта ничего не упрощает.
Зачем было навязывать свои еслинт плагины?
В чем проблема сделать как Razzle? Он решает одну задачу — конфигурирует webpack для SSR, и делает её очень хорошо. При этом позволяя легко кастомизировать и расширять любую часть, что бабель, что вебпак, что энвы, что еслинт.
Но авторы CRA это дичайшие вахтеры, навязали десятки спорных решений, и называют это хорошим решением для новичка. Притом новичок не может использовать инструменты вроде eslint и postcss по документации этих инструментов, CRA ломает использование инструментов.
Так не должно быть. Я собираю голоса на создание нормального инструмента для бутстрапинга react приложений. Пишите в комментариях всё, что думаете про CRA и его проблемы. Какие плюсы лично вам нравятся в CRA и их нужно перенести в адекватную реализацию?
Вернемся к CRA.
Этим рассадником я конечно же больше пользоваться не буду. Потому что есть альтернативы:
1. Parcel — самый простой и быстрый старт, но не так всё хорошо с кастомизацией. Лично мой хейт за тильды ~ в качестве несменяемых алиасов для корня проекта. Ещё Parcel не умеет работать с file:../.. зависимостями, по тихому подменяет на версию и устанавливает из интернетов. При всех минусах я его активно юзаю
2. Razzle — да, мы все привыкли, что он не очень хорошо развивается и нужен только для SSR, но на самом деле в него добавляются новые фичи, замержили шаблоны в стиле CRA, а также есть SPA mode. Собственно теперь Razzle является полноценной заменой CRA, при этом без его проблем с кастомизацией и навязываением своих проблем. Используйте babel как удобно. Самое важное, что Razzle поддерживает не только React, ещё и preact, elm, inferno, rax, angular, vue и что-нибудь своё. Например, можно легко сделать шаблон для forest.
Я очень рад, что отвратительное отношение авторов CRA к своим пользователям это не единственный вариант из списка готовых стартеров.