const { execSync } = require('child_process'); const fs = require('fs'); const path = require('path'); console.log('🚀 Начинаю экспорт обновления для Self-hosted OTA...'); try { // 1. Выполняем стандартный экспорт Expo console.log('📦 Выполняю npx expo export...'); execSync('npx expo export --platform android', { stdio: 'inherit' }); // 2. Путь к папке экспорта const distDir = path.join(process.cwd(), 'dist'); if (!fs.existsSync(distDir)) { throw new Error('Папка dist не была создана. Проверьте вывод npx expo export.'); } // 3. Генерация манифеста (metadata.json) для нашего сервера // В современных версиях Expo манифесты генерируются автоматически в папке dist/metadata.json // Но если нам нужен кастомный формат для Nginx, мы можем доработать его здесь. const metadataPath = path.join(distDir, 'metadata.json'); if (fs.existsSync(metadataPath)) { console.log('✅ Manifest (metadata.json) найден.'); } else { console.warn('⚠️ Manifest не найден в dist. Возможно, версия Expo требует ручной генерации.'); } console.log('\n--- ИНСТРУКЦИЯ ---'); console.log('1. Скопируйте всё содержимое папки /dist на ваш сервер Nginx.'); console.log('2. Убедитесь, что сервер возвращает заголовок "expo-protocol-version: 1".'); console.log('3. Проверьте доступность по адресу из app.json.'); console.log('------------------'); } catch (error) { console.error('❌ Ошибка при экспорте:', error.message); process.exit(1); }