Ниже — сжатая диагностическая шпаргалка и набор конкретных действий, которые обычно решают ошибку ConfigError и «вечную» загрузку в Expo Go. Выполняйте шаги по очереди и проверяйте результат после каждого.
Кратко — две частые причины
- ConfigError: Expo не может прочитать/найти корректный конфиг (app.json / app.config.js) или в нём синтаксическая/структурная ошибка.
- Бесконечная загрузка в Expo Go: клиент не получает бандл от Metro (сетевые проблемы, кэш, несовместимость версий, бандлер не стартовал).
1) Посмотрите точный текст ошибки
- Скопируйте и проверьте лог в терминале (expo start) и/или логи в DevTools. Часто ConfigError говорит, какой файл и какую проблему обнаружил (синтаксис, отсутствует поле slug/name, ошибка в app.config.js и т.д.).
2) Проверка конфигурации проекта
- Убедитесь, что в корне есть app.json или app.config.js и что они корректны.
- app.json минимально должен содержать:
{
"expo": {
"name": "MyApp",
"slug": "my-app",
"sdkVersion": "XX.X.X"
}
}
- Если app.config.js — убедитесь, что он экспортирует объект/функцию корректно:
module.exports = () => ({ expo: { name: 'MyApp', slug: 'my-app', ... } });
- Проверьте JSON на синтаксические ошибки (JSONLint или jq).
- Если используете переменные окружения в app.config.js — временно упростите конфиг, чтобы исключить ошибку в коде.
3) Если ошибка в app.config.js (или ошибочный require/import)
- Откройте файл и ищите синтаксические ошибки, некорректный импорт, обращение к process.env, которого нет.
- Замените временно на простой статический конфиг, чтобы проверить, исчезнет ли ConfigError.
4) Монорепозитории / нестандартная структура
- Если проект в монорепо, убедитесь, что запускаете expo в корне проекта с пакетом, а не в workspace root, где нет app.json.
- Можно явно указать конфиг: expo start --config path/to/app.json
5) Очистка кэшей и переустановка зависимостей
В терминале в корне проекта выполните:
- npm run start/ expo start -c
или
- expo start -c (флаг -c очищает кеш Metro/Expo)
- Удалите node_modules и установите заново:
rm -rf node_modules package-lock.json yarn.lock .expo
npm install (или yarn)
- У macOS/Linux: watchman watch-del-all
- Иногда помогает удалить кеш npm: npm cache clean --force
6) Убедитесь в совместимости версий
- Проверьте sdkVersion в app.json и версию Expo CLI / Expo Go. Если SDK старый, используйте соответствующую версию Expo Go или обновите проект (expo upgrade).
- Обновите локальный CLI: npm i -g expo-cli (или используйте npx expo start)
- На мобильном устройстве установите последнюю Expo Go из App Store / Play Market или используйте правильную версию для старого SDK.
7) Сеть и подключение устройства
- Попробуйте переключить способ подключения (LAN / Tunnel / Local) в интерфейсе expo start.
- Если устройство и компьютер не в одной сети или есть VPN/firewall — это может блокировать загрузку бандла.
- Для диагностики: попробуйте открыть URL, который показывает expo («exp://…» или локальный http бандл) в браузере или в эмуляторе.
8) Разрешения и брандмауэр
- На Windows/ macOS разрешите node/Expo в брандмауэре.
- Отключите временно VPN/антивирус на время теста.
9) Просмотр логов Metro / включение дебага
- Запустите с подробными логами:
EXPO_DEBUG=true expo start
Это даст больше инфы для ConfigError и почему бандл не отдается.
10) Специфичные случаи
- Если ошибка связана с @expo/config-plugins или плагинами — проверьте синтаксис плагина в app.json/манифесте. Убедитесь, что версии плагинов совместимы с вашим SDK.
- Если используете кастомный dev client — убедитесь, что dev client собран под ту же конфигурацию.
Если ничего не помогает — пришлите сюда:
- Точный текст ошибки (весь stack trace из терминала).
- Содержимое app.json / app.config.js.
- Версии: expo SDK (sdkVersion), версия expo cli (expo --version), node (node -v), npm/yarn.
С этими данными смогу подсказать точное исправление.