// Expo SDK 52+ сам настраивает Metro для монорепо (watchFolders, nodeModulesPaths). const path = require('node:path'); const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); // watchFolders включает весь apps/mobile, а без watchman Metro обходит и хэширует каждый файл. // android/ и ios/ после prebuild содержат гигабайты промежуточных файлов Gradle/CMake — // в release-сборке Metro на них «висит». В JS-бандл из этих папок ничего не попадает. const escape = (p) => p.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const nativeDirs = ['android', 'ios'].map((d) => new RegExp(`^${escape(path.join(__dirname, d) + path.sep)}.*`)); // Gradle собирает нативные модули прямо в node_modules/<пакет>/android/{build,.cxx,.gradle}, // а корневой node_modules тоже в watchFolders. const nativeBuildOutputs = /[\\/]android[\\/](build|\.cxx|\.gradle)[\\/].*/; config.resolver.blockList = [...[].concat(config.resolver.blockList ?? []), ...nativeDirs, nativeBuildOutputs]; // В CI раннер делит 8 ГБ RAM с Gradle: по умолчанию Metro запускает воркер на каждое ядро. if (process.env.CI) config.maxWorkers = 2; module.exports = config;