В официальной документации React Native, из раздела Getting Started, мы узнаем о том, что у нас есть два пути запуска мобильного приложения: expo и react-native cli. Пользователи Windows и Linux, а таких большинство, зайдя во вкладку Building Projects with Native Code и выбирая Target OS: iOS, встречают надпись, которая отправляет их на стартер Expo, но перед тем как ставить Expo, предлагаю ознакомиться с информацией в следующей таблице и поберечь свою голову не только от тех тумаков, что получил я:
Наименование | react-native init | Expo |
---|---|---|
Вы можете добавить собственные модули, написанные на Java / Objective-C | Да | Нет |
Вес стандартного приложения Hello World | 5 мБ | 25 мБ |
Требуется Android Studio и XCode для запуска проектов | Да | Нет |
Шрифты необходимо импортировать вручную в XCode | Да | Нет |
Совместное использование приложения (с помощью QR-кода или ссылки), вам не нужно отправлять весь файл .apk или .ipa | Сложней | Легче |
Если вы хотите поделиться этим приложением, вам нужно отправить весь файл .apk / .ipa | Да | Нет |
Предоставляет JS API из коробки, например Push-Notifications, Asset Manager | Нет | Да |
Если вы все же выбрали Expo, то вопрос времени, что вы столкнетесь с его ограничениями и захотите использовать нативные модули, то для этого вам придется делать detach. По своему опыту и многих знакомых коллег знаю, что detach делается криво, а это значит, что вам придется рефакторить кучу ошибок.
Для меня Live Reloading в симуляторе стал верным другом, но в Expo он постоянно ломается и его постоянно приходится перезапускать, от чего процесс разработки становится мучительным.
В Expo полным полно зависимостей, которые лично вам для проекта будут не нужны, но вы будете обязаны ждать дополнительное время, пока соберется ваш JS бандл с лишним мусором, а после этот мусор Expo добавит в ваш релизный .apk и .ipa на мобильные устройства ваших клиентов, из-за чего время запуска приложения возрастет, а вместе с ним возрастает время на разработку приложения, так как JS бандл приходится собирать очень часто.
Если бы компоненты Expo работали бы и с react-native cli, то не было бы проблем, а так я наблюдаю пропасть в совместимости стартеров и самое печальное, что Expo начнет подкидывать вам свои дополнительные ошибки, связанные со своей инфраструктурой.
Конечно не у всех есть возможность купить Mac, но бэнчмаркинг двух стартеров и мой 2.5 годичный опыт работы на том и другом показывает, что разрабатывать приложение с react-native cli, даже только из под Windows на Android — это более выгодная инвестиция в более профессиональное решение, так как с React-Native используется одна кодовая база под iOS и Android.
Надеюсь на вашу обратную связь, благодаря которой информация в изложенной статье будет корректироваться и дополняться.
Если вам интересна эта статья, то скорее всего вы только начинаете изучать React Native, а значит вам будет интересен мой видео-курс на русском языке по основам React-Native, который можно пройти с любым стартером.
Автор: рекрут