it-swarm.com.de

React-Native: Das Modul AppRegistry ist kein registriertes aufrufbares Modul

Ich versuche gerade, den ES6 React-native-webpack-server auf einem Android-Emulator auszuführen. Der Unterschied ist, dass ich package.json und build.grade für die Verwendung von react 0.18.0 aufgerüstet habe und diesen Fehler beim Booten erhalten. Soweit mir bekannt ist, wird AppRegistry korrekt importiert. Selbst wenn ich den Code auskommentieren würde, tritt dieser Fehler immer noch auf. Dies funktioniert auf iOS ohne Probleme. 

Was mache ich falsch?

BEARBEITEN: Nachdem ich andere Boilerplates ausprobiert habe, die 0.18.0 unterstützen, stößt ich immer noch auf das gleiche Problem.

 enter image description here

85
Dustin

ich habe gerade ein Upgrade auf Reactor-native 0.18.1 vorgenommen, da ich einige Probleme mit der Abhängigkeit von Peer-Abhängigkeiten mit der 0.19.0-rc-Vorabversion hatte.

Zurück zu Ihrer Frage, was ich getan habe

  1. cd Android
  2. Sudo ./gradlew clean

dann zurück ins Arbeitsverzeichnis und führe react-native run-Android aus

sie sollten Ihre npm nach dem Upgrade ebenfalls neu starten.

hoffe das klappt für dich.

31
chinloong

Ich hatte das gleiche Problem bei ios und die Ursache für mich, was mein index.io.js falsch war (da ich eines der Beispiele kopiert habe, ohne dessen Inhalt zu betrachten), endete es mit einer Modulexportdeklaration

exports.title = ...
exports.description = ...
module.exports = MyRootComponent;

Anstelle des erwarteten 

AppRegistry.registerComponent('MyAppName', () => MyRootComponent);

Sie könnten das gleiche Problem auf Android mit dem index.Android.js haben, denke ich.

13
jolivier

Ich habe dieses Problem einfach durch Hinzufügen gelöst 

import { AppRegistry } from "react-native";
import App from "./App";
import { name as appName } from "./app.json";  
AppRegistry.registerComponent(appName, () => App);

zu meiner index.js

stellen Sie sicher, dass dies in Ihrem vorhanden ist index.js

5
Omar Samman

Der Hauptgrund für dieses Problem könnte darin liegen, dass Sie ein Plugin installiert haben und vergessen, es zu verknüpfen.

versuche dies:

react-native link

Führen Sie Ihre App erneut aus.

Hoffe das wird helfen. Bitte lass es mich in Kommentaren wissen. Vielen Dank.

4
iDevAmit

Hoffentlich kann dies jemandem Kopfschmerzen ersparen. Ich habe diese Fehlermeldung erhalten, nachdem ich meine reagierende Version aktualisiert habe. Verwirrend erschien es nur auf der Android-Seite.

Meine Dateistruktur enthält einen index.ios.js und einen index.Android.js. Beide enthalten den Code:

AppRegistry.registerComponent('App', () => App);

Ich musste in Android/app/src/main/Java/com/{projectName}/MainApplication.Javaindex in index.Android ändern:

@Override
protected String getJSMainModuleName() {
    return "index.Android"; // was "index"
}

Ändern Sie dann in app/build/build.gradle die entryFile von index.js in index.Android.js.

project.ext.react = [
    entryFile: "index.Android.js" // was index.js"
]
2
dcordz

Ich weiß nicht warum, aber wenn ich AppRegistry.registerComponent aus der Datei index.js verschiebe, die in index.Android.js enthalten ist, um sich direkt in index.Android.js zu befinden, scheint es zu funktionieren.

2
sofou

Wenn Sie einige der Beispiele verwenden, funktionieren sie möglicherweise nicht

Hier ist meine Version zum Blättern

/**
 * 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);
1
user6223605

Für mich war mein Problem das falsche entry-file beim Bündeln.

Ich habe App.js als Einstiegsdatei verwendet, daher konnte die App AppRegistry nicht finden

Richtig:

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/

Falsch:

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/
1
tywhang

Ich habe es auf Genymotion deinstalliert. Führen Sie dann react-native run-Android aus, um die App zu erstellen. Und es hat funktioniert. Versuchen Sie dies zuerst, bevor Sie Sudo ./gradlew clean ausführen. Dadurch sparen Sie viel Zeit.

1
kklw

packager neu starten hat bei mir funktioniert. Töte einfach den reaktiven nativen Packager und starte ihn erneut.

0
Ahmad Dehnavi

In meinem Fall verweist mein index.js nur auf ein anderes js anstelle meines Launcher js, das versehentlich nicht AppRegistry.registerComponent() enthält.

Stellen Sie daher sicher, dass die Datei Ihrindex.jspoint die Klasse registriert.

0
yao

Mein Problem wurde behoben, indem meine inotify max_user_watches erhöht wurde:

Sudo sysctl fs.inotify.max_user_watches=1280000
0
spectralsun

Für mich habe ich nur mit React Native auf diese Weise verlinkt: Reactate-Link

0
Asma_Kh

Für mich war es ein Problem mit der reaktionsabhängigen Abhängigkeit von der nächsten Version von package, während in package.json die alte angegeben wurde. Ein Upgrade meiner Reakt-Version hat dieses Problem behoben.

0
requirunt