React-Native: Module AppRegistry no es un módulo invocable registrado


114

Actualmente estoy tratando de ejecutar el servidor ES6 react-native-webpack-server en un emulador de Android. La diferencia es que he actualizado mi package.jsony build.gradepara usar react 0.18.0, y recibo este error al arrancar. Hasta donde yo sé, AppRegistryse importa correctamente. Incluso si tuviera que comentar el código, este error sigue apareciendo. Esto funciona en iOS sin problemas.

¿Qué estoy haciendo mal?

EDITAR: Después de probar otros modelos estándar que admiten 0.18.0, todavía me encuentro con el mismo problema.

ingrese la descripción de la imagen aquí


Estoy teniendo el mismo problema con 0.19 y 0.20, lo he intentado todo pero no tuve suerte: '(¿Alguna actualización @Dustin?
Shprink

@Shprink También tengo este problema con 0.20. También recibe este númeroOne of the sources for assign has an enumerable key on the prototype chain.
Josh Ferrara

Respuestas:


58

Acabo de actualizar a react-native 0.18.1hoy y es difícil tener algunos problemas de dependencias entre pares con 0.19.0-rcla versión preliminar.

Volviendo a tu pregunta, lo que hice fue

  1. cd android
  2. sudo ./gradlew clean(más información sobre cómo funciona limpio aquí )

luego regrese al directorio de trabajo y ejecute react-native run-android

también debe reiniciar su npm después de esa actualización.

Espero que esto funcione para usted.


3
Estoy tratando de ejecutar el comando gradlew pero me sigue diciendo que no puedo encontrar el SDK de Android aunque lo tengo ANDROID_HOMEen mi camino. También agregué el local.propertiesarchivo con sdk.dir=. ¿Algunas ideas?
Steezeburger

43
Al dar el consejo de hacer algo como sudo ./gradlew clean, sería bueno mencionar que es una operación enorme que aparentemente vuelve a descargar y reinstalar toda la distribución de Gradle.
Szczepan Hołyszewski

1
obteniendo el error Module HMRClient no es un módulo invocable registrado (habilitación de llamada). No puedo ver mis cambios que se realizan en archivos js :(
Dinesh R Rajput

Para encontrar la ubicación de su SDK de Android, abra Android Studio y presione configurar, verá una ruta en la parte superior que probablemente sea algo como:/Users/karim/Library/Android/sdk
Karim Mortabit

esto no hizo nada por mí después de que intenté actualizar a RN 0.44
SleepsOnNewspapers

15

Tuve el mismo problema en iOS y la causa fue que mi index.ios.js era incorrecto (porque copié y pegué uno de los ejemplos sin mirar su contenido), terminaba con una declaración de exportación de módulo

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

En lugar de lo esperado

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

Supongo que podría tener el mismo problema en Android con index.android.js.


13

La única razón principal de este problema podría ser donde habría instalado un complemento y se olvidó de vincularlo .

prueba esto:

react-native link

Vuelva a ejecutar su aplicación.

Espero que esto ayude. Házmelo saber en los comentarios . Gracias.


1
La ejecución react-native linksin el nombre del paquete está obsoleta y se eliminará en la próxima versión.
Harshad Madaye

9

Resolví este problema simplemente agregando

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

a mi index.js

asegúrese de que esto exista en su index.js


3

Para mí, mi problema fue poner el archivo de entrada incorrecto al empaquetar.

Estaba usando App.js como mi archivo de entrada, por lo tanto, la aplicación no pudo encontrar AppRegistry

Correcto:

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/

Incorrecto:

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/

salvaste mi cerebro ... eran días que intentaba entender por qué si lanzaba el 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 todo funcionaba, mientras que en cambio si publicaba con fastlane la aplicación fallaba con este error: Module AppRegistry is not a registered callable module (calling runApplication) En el build.gradle tenía, probablemente suciedad, un archivo de entrada incorrecto! ¡Gracias de nuevo!
Nobady

3

Con suerte, esto puede ahorrarle a alguien un dolor de cabeza. Recibí este error después de actualizar mi versión nativa de reacción. Confusamente, solo apareció en el lado androide de las cosas.

Mi estructura de archivos incluye un index.ios.jsy un index.android.js. Ambos contienen el código:

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

Lo que tenía que hacer era android/app/src/main/java/com/{projectName}/MainApplication.javacambiar indexa index.android:

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

Luego en app/build/build.gradle, cambie el entryFilede index.jsaindex.android.js

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


2

No sé por qué, pero cuando muevo AppRegistry.registerComponent del archivo index.js que se incluye en index.android.js para que resida directamente dentro de index.android.js, parece funcionar.


1

Si está utilizando algunos de los ejemplos, es posible que no funcionen

Aquí está mi versión para vista de desplazamiento

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

Lo desinstalé en Genymotion. Luego, ejecute react-native run-androidpara crear la aplicación. Y funcionó. Pruebe esto primero antes de ejecutarlo sudo ./gradlew clean, le ahorrará mucho tiempo.


1

reiniciar empaquetador funcionó para mí. simplemente mata a react native packager y ejecútalo de nuevo.


1

si se enfrenta a este error en Windows con Android

abra la carpeta de la aplicación del directorio raíz y muévase a la carpeta de Android.

     cd android 
     gradlew clean

inicie su aplicación de nuevo react-native run-android

bhooom funciona


0

En mi caso, my index.jssolo apunta a otro js en lugar de a mi Launcher js por error, que no contieneAppRegistry.registerComponent() .

Por lo tanto, asegúrese de que el archivo sea su index.jspunto para registrar la clase.


0

Mi problema se solucionó aumentando mi inotify max_user_watches:

sudo sysctl fs.inotify.max_user_watches=1280000

0

Para mí, fue un problema con la dependencia de react-native en la próxima versión del paquete de reacción, mientras que en mi package.json se especificó el anterior. Actualizar mi versión de reacción resolvió este problema.


0

Para mí, solo me vinculé con react native de esta manera: react-native link


Tal vez amplíe esto un poco.

0

npm start - --reset-cache

Probablemente el puerto ya esté en uso. Me enfrento a un problema similar cuando ejecuto por primera vez react-native run-android y luego npm start. Lo resuelvo así: Primero, obtenga la identificación del proceso que se ejecuta en el puerto 8081: sudo lsof -i: 8081


0

Recibí este error en la Expo porque había exportado el nombre del componente incorrecto, por ejemplo

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

export default Stack;

0

Resolví este problema haciendo lo siguiente:

  1. cd android
  2. ./gradlew limpio
  3. taskkill / f / im node.exe
  4. desinstalar la aplicación de Android

0

Si está utilizando una máquina con Windows, debe hacerlo cd androidy ./gradlew cleanluego ejecutarreact-native run-android

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.