diff --git a/packages/react-native/scripts/replace-rncore-version.js b/packages/react-native/scripts/replace-rncore-version.js index 98d4798c660..04b55201fd0 100644 --- a/packages/react-native/scripts/replace-rncore-version.js +++ b/packages/react-native/scripts/replace-rncore-version.js @@ -96,6 +96,18 @@ function replaceRNCoreConfiguration( ); } + // Preserve Expo-generated modulemap before replacing directories + const useFrameworksModulemapName = 'React-use-frameworks.modulemap'; + const useFrameworksModulemapPath = path.join( + finalLocation, + useFrameworksModulemapName, + ); + let savedModulemap = null; + if (fs.existsSync(useFrameworksModulemapPath)) { + console.log('Preserving', useFrameworksModulemapName); + savedModulemap = fs.readFileSync(useFrameworksModulemapPath); + } + // Delete all directories in finalLocation - not files, since we want to // keep the React-VFS.yaml file const dirs = fs @@ -132,9 +144,21 @@ function replaceRNCoreConfiguration( } } } + } finally { // Clean up temp directory fs.rmSync(tmpDir, {force: true, recursive: true}); + + // Restore Expo-generated modulemap after directory replacement. + // Runs in finally so it is not skipped if mv/cp partially fails. + if (savedModulemap != null) { + const restoredPath = path.join( + finalLocation, + useFrameworksModulemapName, + ); + fs.writeFileSync(restoredPath, savedModulemap); + console.log('Restored', useFrameworksModulemapName); + } } }