React-Native: Modul AppRegistry ist kein registriertes aufrufbares Modul

114

Ich versuche derzeit, den ES6 React-Native-Webpack-Server auf einem Android-Emulator zum Laufen zu bringen. Der Unterschied ist , habe ich ein Upgrade meines package.jsonund build.gradeGebrauch reagiert 0.18.0, und bin immer diese Fehlermeldung beim Booten. Soweit mir bekannt AppRegistryist, wird korrekt importiert. Selbst wenn ich den Code auskommentieren würde, tritt dieser Fehler immer noch auf. Dies funktioniert unter iOS ohne Probleme.

Was mache ich falsch?

BEARBEITEN: Nachdem ich andere Boilerplates ausprobiert habe, die 0.18.0 unterstützen, stoße ich immer noch auf dasselbe Problem.

Geben Sie hier die Bildbeschreibung ein

Dustin
quelle
Ich habe das gleiche Problem mit 0.19 und 0.20, ich habe alles versucht, aber kein Glück: '(Irgendein Update @Dustin?
Shprink
@Shprink Ich bekomme auch dieses Problem mit 0.20. Auch erhalten diese AusgabeOne of the sources for assign has an enumerable key on the prototype chain.
Josh Ferrara

Antworten:

58

Ich habe gerade ein Upgrade auf React-Native durchgeführt, da es 0.18.1heute Probleme mit Peer-Abhängigkeiten mit der 0.19.0-rcVorabversion gibt.

Zurück zu Ihrer Frage, was ich getan habe, war

  1. cd android
  2. sudo ./gradlew clean(Weitere Informationen darüber, wie sauber funktioniert, finden Sie hier )

dann zurück zum Arbeitsverzeichnis und ausführen react-native run-android

Sie sollten Ihre npm auch nach diesem Upgrade neu starten.

hoffe das funktioniert bei dir.

Chinloong
quelle
3
Ich versuche, den Befehl gradlew auszuführen, aber er sagt mir immer wieder, dass das Android SDK nicht gefunden werden kann, obwohl ich mich ANDROID_HOMEauf meinem Weg befinde . Ich habe auch die local.propertiesDatei mit hinzugefügt sdk.dir=. Irgendwelche Ideen?
Steezeburger
42
Wenn Sie den Rat geben, so etwas zu tun sudo ./gradlew clean, wäre es schön zu erwähnen, dass es sich um eine riesige Operation handelt, die anscheinend die gesamte Gradle-Distribution erneut herunterlädt und neu installiert.
Szczepan Hołyszewski
1
Fehler erhalten Modul HMRClient ist kein registriertes aufrufbares Modul (Calling Enable). Ich kann meine Änderungen nicht sehen, die in js-Dateien vorgenommen wurden :(
Dinesh R Rajput
Um Ihren Android SDK-Speicherort zu finden, öffnen Sie Android Studio und /Users/karim/Library/Android/sdk
klicken
Dies hat nichts für mich getan, nachdem ich versucht habe, auf RN
0.44
15

Ich hatte das gleiche Problem unter iOS und die Ursache für mich war, dass meine index.ios.js falsch war (weil ich eines der Beispiele kopiert und eingefügt habe, ohne auf den Inhalt zu achten ). Es endete mit einer Modul-Exportdeklaration

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

Anstelle des erwarteten

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

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

Jolivier
quelle
13

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

Versuche dies:

react-native link

Führen Sie Ihre App erneut aus.

Hoffe das wird helfen. Bitte lassen Sie es mich in den Kommentaren wissen . Vielen Dank.

iDevAmit
quelle
1
Das Ausführen react-native linkohne Paketnamen ist veraltet und wird in der nächsten Version entfernt.
Harshad Madaye
9

Ich habe dieses Problem nur 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 meinen index.js

Stellen Sie sicher, dass dies in Ihrer index.js vorhanden ist

Omar Samman
quelle
3

Für mich bestand mein Problem darin, beim Bündeln die falsche Eintragsdatei zu platzieren .

Ich habe App.js als Eintragsdatei 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/
Tywhang
quelle
Du hast mein Gehirn gerettet ... es waren Tage, an denen ich versuchte zu verstehen, warum, wenn ich den Befehl startete: 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 alles funktionierte, während stattdessen, wenn ich mit Fastlane veröffentlichte, die App mit diesem Fehler abstürzte: Module AppRegistry is not a registered callable module (calling runApplication) In der build.gradle hatte ich wahrscheinlich Schmutz, eine falsche entryFile! Danke noch einmal!
Nobady
3

Hoffentlich kann dies jemandem Kopfschmerzen ersparen. Ich habe diesen Fehler nach dem Upgrade meiner reaktionsnativen Version erhalten. Verwirrenderweise erschien es nur auf der Android-Seite der Dinge.

Meine Dateistruktur enthält ein index.ios.jsund ein index.android.js. Beide enthalten den Code:

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

Was ich tun musste android/app/src/main/java/com/{projectName}/MainApplication.java, war zu ändern indexin index.android:

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

Dann app/build/build.gradleändert sich die entryFilevon index.jszuindex.android.js

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

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

sofou
quelle
1

Wenn Sie einige Beispiele verwenden, funktionieren diese möglicherweise nicht

Hier ist meine Version für die Bildlaufansicht

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

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

kklw
quelle
1

Neustart Packager hat bei mir funktioniert. töte einfach den nativen Packager und starte ihn erneut.

Ahmad Dehnavi
quelle
1

Wenn Sie diesen Fehler in Windows mit Android haben

Öffne deinen Root-Verzeichnis-App-Ordner und gehe in den Android-Ordner.

     cd android 
     gradlew clean

Starten Sie Ihre App erneut React-Native Run-Android

bhooom es funktioniert

NuMan Ijaz
quelle
0

In meinem Fall zeigt mein index.jsnur fälschlicherweise auf ein anderes js anstelle meines Launcher js, das nicht enthält AppRegistry.registerComponent().

index.jsStellen Sie also sicher, dass die Datei Ihr Punkt ist, um die Klasse zu registrieren.

yao
quelle
0

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

sudo sysctl fs.inotify.max_user_watches=1280000
Spectralsun
quelle
0

Für mich war es ein Problem mit der reaktionsnativen Abhängigkeit von der nächsten Version des Reaktionspakets, während in meiner package.json die alte angegeben wurde. Das Aktualisieren meiner Reaktionsversion löste dieses Problem.

erforderlich
quelle
0

Für mich habe ich nur so mit React Native verlinkt: React-Native Link

Asma_Kh
quelle
Vielleicht etwas näher darauf eingehen.
0

npm start - --reset-cache

Wahrscheinlich wird der Port bereits verwendet. Ich habe ein ähnliches Problem, wenn ich zuerst reag-native run-android und dann npm start starte. Ich löse es folgendermaßen: Zuerst die ID des Prozesses abrufen, der in Port 8081 ausgeführt wird: sudo lsof -i: 8081

Yohann Atticot
quelle
0

Ich habe diesen Fehler in Expo erhalten, weil ich den falschen Komponentennamen exportiert habe, z

const Wonk = props => (
  <Text>Hi!</Text>
)

export default Stack;
duhaime
quelle
0

Ich habe dieses Problem folgendermaßen gelöst:

  1. CD Android
  2. ./gradlew sauber
  3. taskkill / f / im node.exe
  4. App von Android deinstallieren
Hamid Shoja
quelle
0

Wenn Sie eine Windows-Maschine verwenden, müssen Sie diese ausführen cd androidund ./gradlew cleandann ausführenreact-native run-android

Md Forhad Sarkar
quelle