React-Native: модуль AppRegistry не является зарегистрированным вызываемым модулем
В настоящее время я пытаюсь запустить ES6 response-native-webpack-server
на эмуляторе Android. Разница в том, что я обновил свои package.json
и build.grade
, чтобы использовать реакцию 0.18.0
, и я получаю эту ошибку при загрузке. Насколько мне известно, AppRegistry
импортируется правильно. Даже если бы я прокомментировал код, эта ошибка все же возникает. Это действительно работает на iOS без проблем.
Что я делаю неправильно?
EDIT: после использования других шаблонов, поддерживающих 0.18.0, я все еще сталкиваюсь с одной и той же проблемой.
![введите описание изображения здесь]()
Ответы
Ответ 1
Я только что обновил до реагирования-родной 0.18.1
сегодня, когда у него возникли проблемы с независимыми экспертами с версией 0.19.0-rc
.
Вернемся к вашему вопросу, что я сделал.
-
cd android
-
sudo ./gradlew clean
затем вернитесь в рабочий каталог и запустите
react-native run-android
вы должны перезапустить свой npm тоже после этого обновления.
надеюсь, что это сработает для вас.
Ответ 2
У меня была та же проблема на iOS, и причина для меня заключалась в том, что мой index.ios.js был неверным (потому что я скопировал один из примеров, не просматривая его содержимое), он заканчивался декларацией экспорта модуля
exports.title = ...
exports.description = ...
module.exports = MyRootComponent;
Вместо ожидаемого
AppRegistry.registerComponent('MyAppName', () => MyRootComponent);
Я думаю, у вас может быть такая же проблема на Android с index.android.js.
Ответ 3
Одной из основных причин этой проблемы может быть то, что вы установили плагин и забыли связать его.
попробуй это:
react-native link
Перезапустите ваше приложение.
Надеюсь, это поможет. Пожалуйста, дайте мне знать в комментариях. Благодарю.
Ответ 4
Я решил эту проблему, просто добавив
import { AppRegistry } from "react-native";
import App from "./App";
import { name as appName } from "./app.json";
AppRegistry.registerComponent(appName, () => App);
к моему index.js
убедитесь, что это существует в вашем index.js
Ответ 5
Надеюсь, это может спасти кого-то головную боль. Я получил эту ошибку после обновления моей реактивной версии. Смутно это только появилось на стороне Android.
В моей файловой структуре есть index.ios.js
и index.android.js
. Оба содержат код:
AppRegistry.registerComponent('App', () => App);
Что мне нужно было сделать, в android/app/src/main/java/com/{projectName}/MainApplication.java
, измените index
на index.android
:
@Override
protected String getJSMainModuleName() {
return "index.android"; // was "index"
}
Затем в app/build/build.gradle
измените entryFile
с index.js
на index.android.js
project.ext.react = [
entryFile: "index.android.js" // was index.js"
]
Ответ 6
Я не знаю, почему, но когда я перемещаю AppRegistry.registerComponent из файла index.js, который включен в index.android.js, чтобы напрямую находиться внутри index.android.js, он работает.
Ответ 7
Для меня моя проблема заключалась в том, чтобы при вставке неверного файла ввода.
Я использовал App.js в качестве своего входного файла, поэтому App не смог найти AppRegistry
Правильный:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
Неправильно:
react-native bundle --platform android --dev false --entry-file App.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
Ответ 8
Если вы используете некоторые из примеров, они могут не работать
Вот моя версия для просмотра прокрутки
/**
* Sample React Native App
* https://github.com/facebook/react-native
*/
import React, {
AppRegistry,
Component,
StyleSheet,
Text,
View,
ScrollView,
TouchableOpacity,
Image
} from 'react-native';
class AwesomeProject extends Component {
render() {
return (
<View>
<ScrollView
ref={(scrollView) => { _scrollView = scrollView; }}
automaticallyAdjustContentInsets={false}
onScroll={() => { console.log('onScroll!'); }}
scrollEventThrottle={200}
style={styles.scrollView}>
{THUMBS.map(createThumbRow)}
</ScrollView>
<TouchableOpacity
style={styles.button}
onPress={() => { _scrollView.scrollTo({y: 0}); }}>
<Text>Scroll to top</Text>
</TouchableOpacity>
</View>
);
}
}
var Thumb = React.createClass({
shouldComponentUpdate: function(nextProps, nextState) {
return false;
},
render: function() {
return (
<View style={styles.button}>
<Image style={styles.img} source={{uri:this.props.uri}} />
</View>
);
}
});
var THUMBS = [
'http://loremflickr.com/320/240?random='+Math.round(Math.random()*10000) + 1,
'http://loremflickr.com/320/240?random='+Math.round(Math.random()*10000) + 1,
'http://loremflickr.com/320/240?random='+Math.round(Math.random()*10000) + 1
];
THUMBS = THUMBS.concat(THUMBS); // double length of THUMBS
var createThumbRow = (uri, i) => <Thumb key={i} uri={uri} />;
var styles = StyleSheet.create({
scrollView: {
backgroundColor: '#6A85B1',
height: 600,
},
horizontalScrollView: {
height: 120,
},
containerPage: {
height: 50,
width: 50,
backgroundColor: '#527FE4',
padding: 5,
},
text: {
fontSize: 20,
color: '#888888',
left: 80,
top: 20,
height: 40,
},
button: {
margin: 7,
padding: 5,
alignItems: 'center',
backgroundColor: '#eaeaea',
borderRadius: 3,
},
buttonContents: {
flexDirection: 'row',
width: 64,
height: 64,
},
img: {
width: 321,
height: 200,
}
});
AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);
Ответ 9
Я удалил его на Genymotion. Затем запустите react-native run-android
, чтобы создать приложение. И это сработало. Попробуйте это раньше, прежде чем запускать sudo ./gradlew clean
, это сэкономит вам много времени.
Ответ 10
Для просто перезагрузки компьютера это исправили.
(Моя ошибка была: "модуль appRegistry не является зарегистрированным вызываемым модулем (вызывающим runapplication) js engine: hermes")
Другой главный ответ, который здесь отсутствует и мог бы сработать, заключался в том, чтобы просто убить процессы узла:
killall -9 node
[ Module AppRegistry не является зарегистрированным вызываемым модулем (вызывающим runApplication) ]
Ответ 11
В моем случае мой index.js
просто указывает на другой js вместо моего Launcher js ошибочно, который не содержит AppRegistry.registerComponent()
.
Итак, убедитесь, что файл index.js
указывает на регистрацию класса.
Ответ 12
Моя проблема была исправлена, увеличив мой inotify max_user_watches:
sudo sysctl fs.inotify.max_user_watches=1280000
Ответ 13
Для меня это была проблема с зависящей от реакции зависимостью от следующей версии пакета реакции, в то время как в моем package.json был указан старый. Модернизация моей реактивной версии решила эту проблему.
Ответ 14
Для меня просто я связан с реагировать родной, как этот путь: реакция-родная ссылка
Ответ 15
рестарт упаковщик работал у меня. просто убей реагирующий родной упаковщик и запусти его снова.
Ответ 16
если вы сталкиваетесь с этой ошибкой в Windows с Android
откройте папку приложения корневого каталога и перейдите в папку Android.
cd android
gradlew clean
запустите приложение снова
реагировать родной запустить андроид
хотя это работает
Ответ 17
npm start - --reset-cache
Возможно, порт уже используется. Я сталкиваюсь с подобной проблемой, когда я сначала запускаю реактив-родной запуск андроид, а затем запуск npm. Я решаю это так: во-первых, получить идентификатор процесса, работающего в порту 8081:
судо лсоф -i: 8081
Ответ 18
Я получил эту ошибку в Экспо, потому что я экспортировал неправильное имя компонента, например,
const Wonk = props => (
<Text>Hi!</Text>
)
export default Stack;
Ответ 19
Я решил эту проблему, выполнив следующие действия:
- cd android
- ./gradlew clean
- taskkill/f/im node.exe
- удалить приложение из Android