Урок по треку React Native 6 мин

Expo и bare: что выбрать в 2026 году

Expo SDK, dev build, prebuild и CNG, config plugins, когда нужен bare workflow.

Несколько лет назад вопрос «Expo или чистый React Native» решался просто: Expo для прототипов, bare для серьёзных проектов. Сейчас команда React Native сама рекомендует начинать новые приложения с фреймворка, и Expo стал основным выбором. На собесе проверяют, понимаете ли вы, что именно даёт Expo и где его границы.

Что такое Expo

  • Expo SDK: набор модулей (камера, файлы, уведомления, защищённое хранилище, обновления и многое другое) с согласованными версиями.
  • Expo CLI: запуск, сборка, prebuild.
  • Expo Router: маршрутизация по файлам.
  • EAS (Expo Application Services): облачная сборка, отправка в сторы, OTA-обновления.

Каждая версия SDK привязана к конкретной версии React Native, поэтому обновление идёт целиком: npx expo install --fix подбирает совместимые версии библиотек.

Expo Go и development build

Expo Go это готовое приложение из стора с фиксированным набором нативных модулей. Удобно для обучения и быстрых проб, но свой нативный код и библиотеки, которых нет в Expo Go, в нём не запустить.

Development build это ваша собственная отладочная сборка (expo-dev-client): в неё попадают все ваши нативные зависимости, а JS по-прежнему подтягивается с Metro с быстрым обновлением. Для реального проекта работают именно так.

Prebuild и CNG

Continuous Native Generation: папки android и ios не хранятся в репозитории, а генерируются командой npx expo prebuild из app.json/app.config.ts и подключённых плагинов. Плюсы:

  • обновление React Native не превращается в ручное слияние нативных проектов;
  • нативная конфигурация описана декларативно и проверяется ревью;
  • меньше конфликтов в Git.

Если нужно поменять что-то в нативном проекте (манифест, Info.plist, Gradle), пишут config plugin: функцию, которая модифицирует сгенерированные файлы при prebuild. Многие библиотеки поставляют свой плагин, его достаточно указать в plugins.

Bare workflow

Нативные папки лежат в репозитории и правятся руками. Нужен, когда:

  • много уникального нативного кода и изменений, которые неудобно выражать плагинами;
  • приложение интегрируется в существующий нативный проект (brownfield);
  • команда сознательно управляет нативными проектами сама.

Важно: bare не значит «без Expo». Модули Expo и EAS работают и в bare-проекте. И наоборот, проект на CNG может содержать собственные нативные модули (через Expo Modules API) без выхода из managed-подхода.

Конфигурация

app.config.ts позволяет вычислять конфиг: разные bundleIdentifier, имя и иконку для dev и prod по переменной окружения. Публичные переменные для JS задаются через EXPO_PUBLIC_*: они встраиваются в бандл и видны всем, секреты туда не кладут.

Обновление SDK

Раз в несколько месяцев выходит новый SDK. Порядок: прочитать заметки о выпуске, обновить expo, выполнить npx expo install --fix, проверить совместимость сторонних библиотек (особенно с новой архитектурой), пересобрать development build, прогнать тесты. Приложения, застрявшие на старых SDK, со временем перестают проходить требования сторов к целевым версиям ОС.

Частые ошибки

  • Считать, что в Expo нельзя писать нативный код.
  • Разрабатывать реальный проект в Expo Go.
  • Править android/ и ios/ руками при CNG: изменения пропадут при следующем prebuild.
  • Класть секреты в EXPO_PUBLIC_*.

Что спросят на собесе

  • Что такое Expo и EAS.
  • Expo Go против development build.
  • Что такое prebuild, CNG и config plugins.
  • Когда нужен bare workflow.
  • Как обновлять SDK и React Native.

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.