React-Native: модуль AppRegistry не является зарегистрированным вызываемым модулем
в настоящее время я пытаюсь получить ES6 react-native-webpack-server запуск
на эмуляторе Android. Разница в том, что я обновил свой package.json и build.grade использовать react 0.18.0, и я получаю эту ошибку при загрузке. Насколько мне известно AppRegistry - это правильно импортированы. Даже если я должен был прокомментировать код, эта ошибка все равно возникает. Это работает на iOS без проблем.
что я делаю не так?
EDIT: после попытки других шаблонов, которые делают поддержка 0.18.0, я все еще сталкиваюсь с той же проблемой.

12 ответов:
Я только что обновился до react-native
0.18.1сегодня трудно иметь некоторые проблемы с одноранговыми зависимостями с0.19.0-rcпредварительная версия.возвращаясь к вашему вопросу, что я сделал
cd androidsudo ./gradlew cleanзатем вернуться в рабочий каталог и запустить
react-native run-androidвы также должны перезапустить свой npm после этого обновления.
надеюсь, что это работает для вас.
у меня была такая же проблема на ios и причина для меня, что мой index.io.js было неверно (потому что я скопировал вставленный один из примеров, не глядя на его содержимое), он заканчивался объявлением экспорта модуля
exports.title = ... exports.description = ... module.exports = MyRootComponent;вместо ожидаемого
AppRegistry.registerComponent('MyAppName', () => MyRootComponent);вы могли бы иметь ту же проблему на android с индексом.андроид.Яш, я думаю.
надеюсь, это может спасти кого-то от головной боли. Я получил эту ошибку после обновления моей версии react-native. Смущающе это только появилось на 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.jstoindex.android.js
project.ext.react = [ entryFile: "index.android.js" // was index.js" ]
Я не знаю, почему, но когда я двигаюсь AppRegistry.registerComponent из индекса.js-файл, включенный в индекс.андроид.JS, чтобы находиться внутри индекса.андроид.js напрямую, кажется, работает.
Если вы используете некоторые примеры, они могут не работать
вот моя версия для просмотра прокрутки
/** * 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);
Я удалил его на Genymotion. Тогда беги
react-native run-androidдля создания приложения. И это сработало. Попробуйте это сначала перед запускомsudo ./gradlew clean, это сэкономит вам много времени.
Я решил эту проблему просто добавив
import { AppRegistry } from "react-native"; import App from "./App"; import { name as appName } from "./app.json"; AppRegistry.registerComponent(appName, () => App);мой .js
убедиться, что это существует в вашем .js
одной из основных причин этой проблемы может быть то, где вы установили плагин и забыли связать его.
попробуйте это:
react-native linkповторно запустите приложение.
надеюсь, что это поможет. Пожалуйста, дайте мне знать в комментариях. Спасибо.
В моем случае, мой
index.jsпросто указывает на другой js вместо моего запуска JS ошибочно, который не содержитAppRegistry.registerComponent().Итак, убедитесь, что файл
index.jsукажите, чтобы зарегистрировать класс.
моя проблема была исправлена путем увеличения моего inotify max_user_watches:
sudo sysctl fs.inotify.max_user_watches=1280000
для меня это была проблема с зависимостью react-native от следующей версии пакета react, в то время как в моем пакете.json старый был указан. Обновление моей версии react решило эту проблему.
для меня мой вопрос был неправильно entry-file при объединении.
я использовал приложение.js как мой файл ввода, поэтому приложение не смогло найти 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/
Comments