Я создаю базовое приложение React-Native Expo и постоянно сталкиваюсь с одной проблемой. Я видел другие вопросы о переполнении стека по той же теме, ссылки на которые приведены ниже. Я пробовал решения (если они есть), но ни одно из них не помогло.
Нарушение инварианта:TurboModuleRegistry.getEnforcing(...):'RNGestureHandlerModule' не найден
Когда я создаю сборку разработки для своего приложения и запускаю сборку разработки, я получаю две ошибки ниже:
Ошибка 1:
Нарушение инварианта: TurboModuleRegistry.getEnforcing(...): «RNGestureHandlerModule» не найден. Убедитесь, что модуль с этим именем зарегистрирован в собственном двоичном режиме. Режим Bridgeless: false. Взаимодействие TurboModule: ложь. Загруженные модули: {"NativeModules":["PlatformConstants","LogBox","SourceCode","Timing","AppState","BlobModule","WebSocketModule","DevSettings","DevToolsSettingsManager","Networking"," Appearance","DevLoadingView","HeadlessJsTaskSupport","DeviceInfo","UIManager","ImageLoader","SoundManager","IntentAndroid","DeviceEventManager","NativeAnimatedModule","I18nManager"],"TurboModules":[] ,"NotFound":["NativePerformanceCxx","NativePerformanceObserverCxx","RedBox","BugReporting","LinkingManager","NativeReactNativeFeatureFlagsCxx","RNCSafeAreaContext","RNGestureHandlerModule"]}, js engine: Hermes
Ошибка 2:
ОШИБКА Нарушение инварианта: «main» не зарегистрирован. Это может произойти, если:
AppRegistry.registerComponent
не был вызван., js engine: hermesЯ должен указать, что этот проект работает локально. Это не удается только тогда, когда я запускаю его как сборку для разработки.
Что касается моего кода, у меня есть простая настройка навигации с файлом App.js, HomeScreen.js и ContactScreen.js. Приложение совершенно новое и предназначено просто для тестирования.
Приложение.js:
import 'react-native-gesture-handler';
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomeScreen from './screens/HomeScreen';
import ContactScreen from './screens/ContactScreen';
const Stack = createStackNavigator();
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName = "Home">
<Stack.Screen name = "Home" component = {HomeScreen} />
<Stack.Screen name = "Contact" component = {ContactScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
HomeScreen.js:
import React from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';
const HomeScreen = ({ navigation }) => {
return (
<View style = {styles.container}>
<Text style = {styles.title}>Home Page</Text>
<Button
title = "Go to Contact Page"
onPress = {() => navigation.navigate('Contact')}
/>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
title: {
fontSize: 24,
marginBottom: 20,
},
});
export default HomeScreen;
ContactScreen.js:
import React from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';
const ContactScreen = ({ navigation }) => {
return (
<View style = {styles.container}>
<Text style = {styles.title}>Contact Page</Text>
<Button
title = "Go to Home Page"
onPress = {() => navigation.navigate('Home')}
/>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
title: {
fontSize: 24,
marginBottom: 20,
},
});
export default ContactScreen;
А вот мой файл Package.json:
{
"name": "yoyo",
"version": "1.0.0",
"main": "expo/AppEntry.js",
"scripts": {
"start": "expo start",
"android": "expo run:android",
"ios": "expo run:ios",
"web": "expo start --web"
},
"dependencies": {
"@react-navigation/native": "^6.1.18",
"@react-navigation/stack": "^6.4.1",
"expo": "^51.0.22",
"expo-dev-client": "~4.0.20",
"expo-status-bar": "~1.12.1",
"react": "18.2.0",
"react-native": "0.74.3",
"react-native-document-picker": "^9.3.0",
"react-native-gesture-handler": "~2.16.1",
"react-native-safe-area-context": "4.10.5",
"react-native-screens": "3.31.1",
"react-navigation": "^5.0.0"
},
"devDependencies": {
"@babel/core": "^7.20.0"
},
"private": true
}
Действия по воспроизведению:
npx create-expo-app yoyo --template blank
cd yoyo
yarn add expo
npx expo install expo-dev-client
npm install -g eas-cli
eas login
npx eas build:configure
npx eas build --profile development --platform android
У меня была та же проблема, которую вы описываете, и после множества испытаний я обнаружил, что установка этих пакетов в ваш проект решает проблему.
"react-native-gesture-handler": "~2.16.1",
"react-native-safe-area-context": "4.10.5",
"react-native-reanimated": "~3.10.1",
"react-native-screens": "3.31.1"
убедитесь, что он существует в вашем package.json, и пересоберите проект еще раз, чтобы увидеть результаты.