Перейти к содержимому

2. Expo vs Bare Workflow

Выбор между Expo и чистым React Native — один из первых вопросов при старте проекта. Оба варианта используют React Native, но различаются по удобству, гибкости и возможностям.

Expo — это платформа и набор инструментов поверх React Native, которая упрощает разработку, сборку и деплой мобильных приложений.

Expo = React Native + 100+ готовых API + облачные сборки (EAS) + Expo Go

Expo Go — мобильное приложение для тестирования без сборки. Просто сканируешь QR-код и видишь своё приложение.

Окно терминала
npx create-expo-app MyApp
cd MyApp
npx expo start
# → QR код → Expo Go на телефоне → готово!
Expo Managed Workflow:
✅ Максимальное удобство
✅ Expo Go для тестирования
✅ EAS Build (облачные сборки без Mac)
❌ Ограниченный доступ к нативному коду
Expo Bare Workflow:
✅ Полный доступ к нативному коду (ios/ и android/ папки)
✅ Все Expo SDK библиотеки работают
✅ Expo Go (частично)
❌ Нужен Mac для iOS сборок локально

EAS — облачная CI/CD платформа для React Native:

  • EAS Build — сборка APK/IPA в облаке (не нужен Mac для iOS!)
  • EAS Submit — автоматическая загрузка в App Store / Play Store
  • EAS Update — OTA (over-the-air) обновления без перепубликации
Окно терминала
# Установка EAS CLI
npm install -g eas-cli
# Логин
eas login
# Настройка проекта
eas build:configure
# Сборка для Android
eas build --platform android
# Сборка для iOS (облако — не нужен Mac!)
eas build --platform ios

Полный контроль — полная ответственность. Используется когда:

  • Нужны кастомные нативные модули
  • Сложная нативная интеграция
  • Проект уже существует и переход на Expo нецелесообразен
Окно терминала
npx react-native@latest init MyApp --template react-native-template-typescript
cd MyApp
# Android
npx react-native run-android
# iOS (только на Mac)
cd ios && pod install && cd ..
npx react-native run-ios
КритерийExpo ManagedExpo BareBare RN CLI
Старт2 минуты5 минут15-30 минут
Expo Go✅ Полный✅ Частичный
EAS BuildНастраивается
iOS без Mac✅ EAS✅ EAS
Нативный код
OTA обновления✅ EAS Update✅ EAS UpdateСторонние
Expo SDK✅ Все✅ ВсеЧастично
РекомендуетсяНовые проектыНативные фичиЛегаси / энтерпрайз
Окно терминала
# Camera
expo install expo-camera
# Location
expo install expo-location
# Notifications
expo install expo-notifications
# FileSystem
expo install expo-file-system
# SecureStore (encrypted storage)
expo install expo-secure-store
# Haptics (вибрация)
expo install expo-haptics
# AuthSession (OAuth)
expo install expo-auth-session
# и ещё 100+ модулей...

Современный Expo использует Expo Router — файловый роутинг (как Next.js):

app/
├── _layout.tsx # Корневой layout (NavigationContainer)
├── index.tsx # / (главный экран)
├── profile.tsx # /profile
├── (tabs)/ # Группа с tab-навигацией
│ ├── _layout.tsx # Tab layout
│ ├── home.tsx # /home
│ └── settings.tsx # /settings
└── modal.tsx # /modal (модальный экран)
// app/(tabs)/home.tsx
import { View, Text, StyleSheet } from 'react-native';
import { Link } from 'expo-router';
export default function HomeScreen() {
return (
<View style={styles.container}>
<Text style={styles.title}>Главная</Text>
<Link href="/profile">
<Text style={styles.link}>Перейти в профиль</Text>
</Link>
</View>
);
}
  • Новый проект
  • Команда без нативного опыта
  • Нужна быстрая разработка
  • Подходят стандартные нативные функции
  • Нужны кастомные нативные модули
  • Хочешь гибкость + инструменты Expo
  • Существующий проект без Expo
  • Корпоративные требования (специфические нативные интеграции)
  • Энтерпрайз с выделенными iOS/Android командами