2. Expo vs Bare Workflow
Выбор между Expo и чистым React Native — один из первых вопросов при старте проекта. Оба варианта используют React Native, но различаются по удобству, гибкости и возможностям.
Что такое Expo
Заголовок раздела «Что такое Expo»Expo — это платформа и набор инструментов поверх React Native, которая упрощает разработку, сборку и деплой мобильных приложений.
Expo = React Native + 100+ готовых API + облачные сборки (EAS) + Expo GoExpo Go
Заголовок раздела «Expo Go»Expo Go — мобильное приложение для тестирования без сборки. Просто сканируешь QR-код и видишь своё приложение.
npx create-expo-app MyAppcd MyAppnpx expo start# → QR код → Expo Go на телефоне → готово!Managed Workflow vs Bare Workflow
Заголовок раздела «Managed Workflow vs Bare Workflow»Expo Managed Workflow: ✅ Максимальное удобство ✅ Expo Go для тестирования ✅ EAS Build (облачные сборки без Mac) ❌ Ограниченный доступ к нативному коду
Expo Bare Workflow: ✅ Полный доступ к нативному коду (ios/ и android/ папки) ✅ Все Expo SDK библиотеки работают ✅ Expo Go (частично) ❌ Нужен Mac для iOS сборок локальноEAS (Expo Application Services)
Заголовок раздела «EAS (Expo Application Services)»EAS — облачная CI/CD платформа для React Native:
- EAS Build — сборка APK/IPA в облаке (не нужен Mac для iOS!)
- EAS Submit — автоматическая загрузка в App Store / Play Store
- EAS Update — OTA (over-the-air) обновления без перепубликации
# Установка EAS CLInpm install -g eas-cli
# Логинeas login
# Настройка проектаeas build:configure
# Сборка для Androideas build --platform android
# Сборка для iOS (облако — не нужен Mac!)eas build --platform iosBare React Native (React Native CLI)
Заголовок раздела «Bare React Native (React Native CLI)»Полный контроль — полная ответственность. Используется когда:
- Нужны кастомные нативные модули
- Сложная нативная интеграция
- Проект уже существует и переход на Expo нецелесообразен
npx react-native@latest init MyApp --template react-native-template-typescriptcd MyApp
# Androidnpx react-native run-android
# iOS (только на Mac)cd ios && pod install && cd ..npx react-native run-iosСравнение
Заголовок раздела «Сравнение»| Критерий | Expo Managed | Expo Bare | Bare RN CLI |
|---|---|---|---|
| Старт | 2 минуты | 5 минут | 15-30 минут |
| Expo Go | ✅ Полный | ✅ Частичный | ❌ |
| EAS Build | ✅ | ✅ | Настраивается |
| iOS без Mac | ✅ EAS | ✅ EAS | ❌ |
| Нативный код | ❌ | ✅ | ✅ |
| OTA обновления | ✅ EAS Update | ✅ EAS Update | Сторонние |
| Expo SDK | ✅ Все | ✅ Все | Частично |
| Рекомендуется | Новые проекты | Нативные фичи | Легаси / энтерпрайз |
Expo SDK — что включено
Заголовок раздела «Expo SDK — что включено»# Cameraexpo install expo-camera
# Locationexpo install expo-location
# Notificationsexpo install expo-notifications
# FileSystemexpo 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 Router
Заголовок раздела «Expo Router»Современный 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.tsximport { 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 Managed если:
Заголовок раздела «Выбери Expo Managed если:»- Новый проект
- Команда без нативного опыта
- Нужна быстрая разработка
- Подходят стандартные нативные функции
Выбери Expo Bare если:
Заголовок раздела «Выбери Expo Bare если:»- Нужны кастомные нативные модули
- Хочешь гибкость + инструменты Expo
Выбери React Native CLI если:
Заголовок раздела «Выбери React Native CLI если:»- Существующий проект без Expo
- Корпоративные требования (специфические нативные интеграции)
- Энтерпрайз с выделенными iOS/Android командами