React-Native: Module AppRegistry n'est pas un module appelable enregistré


114

J'essaie actuellement de faire fonctionner le serveur ES6 react-native-webpack-server sur un émulateur Android. La différence est que j'ai mis à niveau mon package.jsonet build.gradeutiliser react 0.18.0, et j'obtiens cette erreur au démarrage. Autant que je sache, il AppRegistryest importé correctement. Même si je devais commenter le code, cette erreur se produit toujours. Cela fonctionne sur iOS sans problème.

Qu'est-ce que je fais mal?

EDIT: Après avoir essayé d'autres passe-partout qui prennent en charge la version 0.18.0, je rencontre toujours le même problème.

entrez la description de l'image ici


J'ai le même problème avec 0.19 et 0.20, j'ai tout essayé mais pas de chance: '(Une mise à jour @Dustin?
Shprink

@Shprink J'obtiens également ce problème avec 0.20. Recevoir également ce numéroOne of the sources for assign has an enumerable key on the prototype chain.
Josh Ferrara

Réponses:


58

Je viens de mettre à niveau pour réagir natif 0.18.1aujourd'hui, ayant des problèmes de dépendance avec les pairs avec 0.19.0-rcla version préliminaire.

De retour à votre question, ce que j'ai fait était

  1. cd android
  2. sudo ./gradlew clean(plus d'informations sur le fonctionnement de la propreté ici )

puis revenez au répertoire de travail et exécutez react-native run-android

vous devez également redémarrer votre npm après cette mise à niveau.

J'espère que cela fonctionne pour toi.


3
J'essaie d'exécuter la commande gradlew mais elle me dit qu'il ne trouve pas le SDK Android même si je l'ai ANDROID_HOMEsur mon chemin. J'ai également ajouté le local.propertiesfichier avec sdk.dir=. Des idées?
steezeburger

43
Lorsque vous donnez des conseils pour faire quelque chose comme sudo ./gradlew clean, il serait bon de mentionner que c'est une énorme opération qui apparemment re-télécharge et réinstalle toute la distribution gradle.
Szczepan Hołyszewski

1
obtention d'erreur Le module HMRClient n'est pas un module appelable enregistré (appelant enable). Je ne suis pas en mesure de voir mes modifications, celles-ci sont effectuées dans les fichiers js :(
Dinesh R Rajput

Pour trouver l'emplacement de votre SDK Android, ouvrez Android Studio et appuyez sur Configurer, vous verrez un chemin en haut qui est probablement quelque chose comme:/Users/karim/Library/Android/sdk
Karim Mortabit

cela n'a rien fait pour moi après avoir essayé de mettre à jour RN 0.44
SleepsOnNewspapers

15

J'ai eu le même problème sur iOS et la cause pour moi était que mon index.ios.js était incorrect (parce que j'ai copié-collé l'un des exemples sans regarder son contenu), il se terminait par une déclaration d'exportation de module

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

Au lieu de l'attendu

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

Vous pourriez avoir le même problème sur Android avec l'index.android.js je suppose.


13

La seule raison principale de ce problème pourrait être l'endroit où vous auriez installé un plugin et oublié de le lier .

essaye ça:

react-native link

Réexécutez votre application.

J'espère que cela aidera. S'il vous plaît laissez-moi savoir dans les commentaires . Merci.


1
L'exécution react-native linksans nom de package est obsolète et sera supprimée dans la prochaine version.
Harshad Madaye

9

J'ai résolu ce problème simplement en ajoutant

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

à mon index.js

assurez-vous que cela existe dans votre index.js


3

Pour moi, mon problème était de mettre le mauvais fichier d'entrée lors du regroupement.

J'utilisais App.js comme fichier d'entrée, donc l'application n'a pas pu trouver AppRegistry

Correct:

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/

Incorrect:

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/

tu as sauvé mon cerveau ... ça faisait des jours que j'essayais de comprendre pourquoi si je 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 lançais la commande: tout fonctionnait, alors qu'à la place, si je publiais avec fastlane, l'application plantait avec cette erreur: Module AppRegistry is not a registered callable module (calling runApplication) dans le build.gradle j'avais, probablement de la saleté, une entrée incorrecte Merci encore!
Nobady

3

J'espère que cela peut éviter à quelqu'un un mal de tête. J'ai eu cette erreur après la mise à niveau de ma version react-native. Confusément, il n'apparaissait que du côté androïde des choses.

Ma structure de fichiers comprend un index.ios.jset un index.android.js. Les deux contiennent le code:

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

Ce que je devais faire était de android/app/src/main/java/com/{projectName}/MainApplication.javachanger indexpour index.android:

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

Ensuite app/build/build.gradle, changez le entryFilede index.jsàindex.android.js

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


2

Je ne sais pas pourquoi, mais lorsque je déplace AppRegistry.registerComponent du fichier index.js inclus dans index.android.js pour résider directement dans index.android.js, cela semble fonctionner.


1

Si vous utilisez certains des exemples, ils pourraient ne pas fonctionner

Voici ma version pour la vue de défilement

/**
 * 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

Je l'ai désinstallé sur Genymotion. Ensuite, exécutez react-native run-androidpour créer l'application. Et ça a marché. Essayez ceci avant de courir sudo ./gradlew clean, cela vous fera gagner beaucoup de temps.


1

redémarrer le packager a fonctionné pour moi. il suffit de tuer le packager natif et de le relancer.


1

si vous rencontrez cette erreur dans Windows avec Android

ouvrez votre dossier d'application de répertoire racine et déplacez-vous dans le dossier Android.

     cd android 
     gradlew clean

redémarrez votre application react-native run-android

bhooom ça marche


0

Dans mon cas, my index.jspointe juste vers un autre js au lieu de mon Launcher js par erreur, qui ne contient pas AppRegistry.registerComponent().

Alors, assurez-vous que le fichier votre index.jspoint pour enregistrer la classe.


0

Mon problème a été résolu en augmentant mes inotify max_user_watches:

sudo sysctl fs.inotify.max_user_watches=1280000

0

Pour moi, c'était un problème avec la dépendance react-native sur la prochaine version du package react, alors que dans mon package.json l'ancien était spécifié. La mise à niveau de ma version de réaction a résolu ce problème.


0

Pour moi, je me suis lié à React Native comme suit: lien react-native


Peut-être développez-vous un peu.

0

npm start - --reset-cache

Le port est probablement déjà utilisé. Je suis confronté à un problème similaire lorsque je lance pour la première fois react-native run-android, puis npm start. Je le résous comme ceci: Tout d'abord, obtenez l'id du processus en cours d'exécution dans le port 8081: sudo lsof -i: 8081


0

J'ai eu cette erreur dans Expo parce que j'avais exporté le mauvais nom de composant, par exemple

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

export default Stack;

0

J'ai résolu ce problème en procédant comme suit:

  1. cd android
  2. ./gradlew nettoyer
  3. taskkill / f / im node.exe
  4. désinstaller l'application d'Android

0

Si vous utilisez la machine Windows que vous devez faire cd androidensuite ./gradlew cleanpuis exécutezreact-native run-android

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.