40 lines
1.9 KiB
JavaScript
40 lines
1.9 KiB
JavaScript
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);
|
||
}
|