React-Native: Module AppRegistry non è un modulo richiamabile registrato


114

Attualmente sto cercando di ottenere il server webpack-nativo di reazione ES6 in esecuzione su un emulatore Android. La differenza è che ho aggiornato il mio package.jsone build.gradeper usare React 0.18.0e ricevo questo errore all'avvio. Per quanto ne so AppRegistryè importato correttamente. Anche se dovessi commentare il codice, questo errore viene comunque visualizzato. Funziona su iOS senza problemi.

Che cosa sto facendo di sbagliato?

EDIT: Dopo aver provato altri boilerplate che supportano 0.18.0, sto ancora riscontrando lo stesso problema.

inserisci qui la descrizione dell'immagine


Sto riscontrando lo stesso problema con 0.19 e 0.20, ho provato di tutto ma senza fortuna: '(Qualche aggiornamento @Dustin?
Shprink

@Shprink Sto anche riscontrando questo problema con 0.20. Riceve anche questo numeroOne of the sources for assign has an enumerable key on the prototype chain.
Josh Ferrara,

Risposte:


58

ho appena aggiornato a React-Native 0.18.1 oggi difficile avere alcuni problemi di dipendenze peer con0.19.0-rc la versione pre-rilascio.

Tornando alla tua domanda, quello che ho fatto è stato

  1. cd android
  2. sudo ./gradlew clean(maggiori informazioni su come funziona la pulizia qui )

quindi torna alla directory di lavoro ed esegui react-native run-android

dovresti riavviare anche il tuo npm dopo l'aggiornamento.

spero che questo funzioni per te.


3
Sto provando a eseguire il comando gradlew ma continua a dirmi che non riesce a trovare l'SDK Android anche se ho ANDROID_HOMEsul mio percorso. Ho anche aggiunto il local.propertiesfile con sdk.dir=. Qualche idea?
steezeburger

43
Quando si dà il consiglio di fare qualcosa del genere sudo ./gradlew clean, sarebbe bello menzionare che si tratta di un'operazione enorme che apparentemente riscarica e reinstalla l'intera distribuzione gradle.
Szczepan Hołyszewski

1
ottenere l'errore Il modulo HMRClient non è un modulo richiamabile registrato (abilitazione chiamata). Non sono in grado di vedere le mie modifiche, quelle sono state fatte nei file js :(
Dinesh R Rajput

Per trovare la posizione dell'SDK Android, apri Android Studio e premi Configura, vedrai un percorso in alto che probabilmente è qualcosa del tipo:/Users/karim/Library/Android/sdk
Karim Mortabit

questo non ha fatto nulla per me dopo aver provato ad aggiornare a RN 0.44
SleepsOnNewspapers

15

Ho avuto lo stesso problema su iOS e la causa per me era che il mio index.ios.js non era corretto (perché ho copiato e incollato uno degli esempi senza guardarne il contenuto), stava finendo con una dichiarazione di esportazione del modulo

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

Invece del previsto

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

Potresti avere lo stesso problema su Android con index.android.js immagino.


13

L'unico motivo principale di questo problema potrebbe essere dove avresti installato un plug-in e dimenticare di collegarlo .

prova questo:

react-native link

Riesegui la tua app.

Spero che questo ti aiuti. Per favore fatemelo sapere nei commenti . Grazie.


1
L'esecuzione react-native linksenza nome pacchetto è deprecata e verrà rimossa nella prossima versione.
Harshad Madaye

9

Ho risolto questo problema semplicemente aggiungendo

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

al mio index.js

assicurati che esista nel tuo index.js


3

Per me il mio problema era inserire il file di ingresso sbagliato durante il raggruppamento.

Stavo usando App.js come file di ingresso, quindi l'app non è riuscita a trovare AppRegistry

Corretta:

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/

non corretto:

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/

mi hai salvato il cervello ... erano giorni che cercavo di capire perché se avessi lanciato il comando: 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 funzionava tutto, mentre invece se pubblicavo con fastlane l'app Module AppRegistry is not a registered callable module (calling runApplication) andava in crash con questo errore: Nel build.gradle avevo, probabilmente sporco, una voce errataFile! Grazie ancora!
Nobady

3

Si spera che questo possa salvare qualcuno dal mal di testa. Ho ricevuto questo errore dopo aver aggiornato la mia versione nativa di reazione. In modo confuso è apparso solo sul lato androide delle cose.

La mia struttura di file include un index.ios.jse un file index.android.js. Entrambi contengono il codice:

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

Quello che dovevo fare era, in android/app/src/main/java/com/{projectName}/MainApplication.java, cambiare indexin index.android:

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

Quindi in app/build/build.gradle, modifica entryFileda index.jsaindex.android.js

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


2

Non so perché, ma quando sposto AppRegistry.registerComponent dal file index.js incluso in index.android.js per risiedere direttamente all'interno di index.android.js, sembra funzionare.


1

Se stai usando alcuni degli esempi, potrebbero non funzionare

Ecco la mia versione per la visualizzazione a scorrimento

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

L'ho disinstallato su Genmony. Quindi corri react-native run-androidper creare l'app. E ha funzionato. Provalo prima di correre sudo ./gradlew clean, ti farà risparmiare un sacco di tempo.


1

riavviare packager ha funzionato per me. basta uccidere il packager nativo di reagire ed eseguirlo nuovamente.


1

se stai affrontando questo errore in Windows con Android

apri la cartella dell'app della directory principale e spostati nella cartella Android.

     cd android 
     gradlew clean

avvia di nuovo la tua app react-native run-android

bhooom funziona


0

Nel mio caso, il mio index.jspunta semplicemente a un altro js invece del mio js di avvio erroneamente, che non contiene AppRegistry.registerComponent().

Quindi, assicurati che il file index.jspunti per registrare la classe.


0

Il mio problema è stato risolto aumentando il mio inotify max_user_watches:

sudo sysctl fs.inotify.max_user_watches=1280000

0

Per me si trattava di un problema con la dipendenza nativa di reazione dalla prossima versione del pacchetto di reazione, mentre nel mio pacchetto.json era specificata quella vecchia. L'aggiornamento della mia versione React ha risolto questo problema.


0

Per me mi sono collegato a React Native in questo modo: React-Native Link


Forse approfondisci un po 'questo aspetto.

0

npm start - --reset-cache

Probabilmente la porta è già in uso. Affronto un problema simile quando eseguo per la prima volta react-native run-android e poi npm start. Lo risolvo in questo modo: Innanzitutto, ottieni l'id del processo in esecuzione nella porta 8081: sudo lsof -i: 8081


0

Ho ricevuto questo errore in Expo perché avevo esportato il nome del componente sbagliato, ad es

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

export default Stack;

0

Ho risolto questo problema effettuando le seguenti operazioni:

  1. cd android
  2. ./gradlew clean
  3. taskkill / f / im node.exe
  4. disinstallare l'app da Android

0

Se si utilizza macchina Windows è necessario fare cd androidpoi ./gradlew cleanquindi eseguirereact-native run-android

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.