React-Native: o módulo AppRegistry não é um módulo chamável registrado

114

No momento, estou tentando fazer o ES6 react-native-webpack-server rodar em um emulador Android. A diferença é que atualizei meu package.jsone build.gradepara usar o react 0.18.0e estou recebendo este erro na inicialização. Pelo que eu sei, AppRegistryé importado corretamente. Mesmo que eu comentasse o código, esse erro ainda surgiria. Isso funciona no iOS sem problemas.

O que estou fazendo de errado?

EDIT: Depois de tentar outros boilerplates que suportam 0.18.0, ainda estou encontrando o mesmo problema.

insira a descrição da imagem aqui

Dustin
fonte
Estou tendo o mesmo problema com 0,19 e 0,20, tentei de tudo, mas sem sorte: '(Alguma atualização @Dustin?
Shprink
@Shprink Também estou tendo esse problema com 0,20. Também recebendo este problemaOne of the sources for assign has an enumerable key on the prototype chain.
Josh Ferrara

Respostas:

58

Acabei de atualizar para reagir nativo 0.18.1hoje, difícil ter alguns problemas de dependências de pares com 0.19.0-rca versão de pré-lançamento.

Voltando à sua pergunta, o que eu fiz foi

  1. cd android
  2. sudo ./gradlew clean(mais informações sobre como a limpeza funciona aqui )

em seguida, volte para o diretório de trabalho e execute react-native run-android

você deve reiniciar seu npm também após essa atualização.

Espero que funcione para voce.

chinloong
fonte
3
Estou tentando executar o comando gradlew, mas ele continua me dizendo que não é possível encontrar o SDK do Android, embora eu o tenha ANDROID_HOMEem meu caminho. Eu também adicionei o local.propertiesarquivo com sdk.dir=. Alguma ideia?
steezeburger de
43
Ao dar o conselho para fazer algo assim sudo ./gradlew clean, seria bom mencionar que é uma operação enorme que aparentemente baixa novamente e reinstala toda a distribuição do gradle.
Szczepan Hołyszewski
1
obtendo erro O módulo HMRClient não é um módulo chamável registrado (ativação de chamada). Não consigo ver minhas alterações feitas nos arquivos js :(
Dinesh R Rajput
Para encontrar a localização do Android SDK, abra o Android Studio e clique em configurar, você verá um caminho na parte superior que provavelmente é algo como:/Users/karim/Library/Android/sdk
Karim Mortabit
isso não
ajudou
15

Eu tive o mesmo problema no iOS e a causa para mim foi que meu index.ios.js estava incorreto (porque eu copiei e colei um dos exemplos sem olhar seu conteúdo), ele estava terminando com uma declaração de exportação do módulo

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

Em vez do esperado

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

Você pode ter o mesmo problema no Android com o index.android.js, eu acho.

mais alegre
fonte
13

A principal razão para este problema pode ser onde você instalou um plugin e esqueceu de vinculá-lo .

tente isto:

react-native link

Execute novamente o seu aplicativo.

Espero que isso ajude. Por favor, deixe-me saber nos comentários . Obrigado.

iDevAmit
fonte
1
A execução react-native linksem o nome do pacote está obsoleta e será removida na próxima versão.
Harshad Madaye
9

Eu resolvi esse problema apenas adicionando

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

para o meu index.js

certifique-se de que existe em seu index.js

Omar Samman
fonte
3

Para mim, meu problema era colocar o arquivo de entrada errado ao empacotar.

Eu estava usando App.js como meu arquivo de entrada, portanto, o aplicativo não conseguiu encontrar AppRegistry

Corrigir:

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/

Incorreta:

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
fonte
você salvou meu cérebro ... fazia dias que eu estava tentando entender porque se eu 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 iniciasse o comando: tudo funcionava, enquanto ao invés se eu publicasse com fastlane o app travava com este erro: Module AppRegistry is not a registered callable module (calling runApplication) No build.gradle eu tinha, provavelmente sujeira, um arquivo de entrada incorreto! Obrigado novamente!
Nobady
3

Esperançosamente, isso pode salvar alguém de uma dor de cabeça. Recebi este erro depois de atualizar minha versão react-native. Surpreendentemente, ele só apareceu no lado andróide das coisas.

Minha estrutura de arquivos inclui um index.ios.jse um index.android.js. Ambos contêm o código:

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

O que eu tive que fazer foi, em android/app/src/main/java/com/{projectName}/MainApplication.java, mudar indexpara index.android:

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

Em seguida app/build/build.gradle, mude entryFilede index.jsparaindex.android.js

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

Não sei por que, mas quando movo AppRegistry.registerComponent do arquivo index.js que está incluído em index.android.js para residir em index.android.js diretamente, parece funcionar.

sofou
fonte
1

Se você estiver usando alguns dos exemplos, eles podem não funcionar

Aqui está minha versão para visualização de rolagem

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

Eu desinstalei no Genymotion. Em seguida, execute react-native run-androidpara construir o aplicativo. E funcionou. Tente fazer isso antes de executar sudo ./gradlew clean, você economizará muito tempo.

kklw
fonte
1

reiniciar packager funcionou para mim. apenas mate o gerenciador nativo de reação e execute-o novamente.

Ahmad Dehnavi
fonte
1

se você está enfrentando este erro no windows com android

abra a pasta do aplicativo do diretório raiz e vá para a pasta android.

     cd android 
     gradlew clean

inicie seu aplicativo novamente react-native run-android

bhooom, funciona

NuMan Ijaz
fonte
0

No meu caso, meu index.jsapenas aponta para outro js em vez do meu Launcher js por engano, que não contém AppRegistry.registerComponent().

Portanto, certifique-se de que o arquivo seja o seu index.jsponto de registro da turma.

yao
fonte
0

Meu problema foi corrigido aumentando meu inotify max_user_watches:

sudo sysctl fs.inotify.max_user_watches=1280000
espectral
fonte
0

Para mim, era um problema com a dependência do react-native na próxima versão do pacote react, enquanto no meu package.json o antigo era especificado. Atualizar minha versão de reação resolveu esse problema.

Requerimento
fonte
0

Para mim, apenas vinculei ao react native desta forma: react-native link

Asma_Kh
fonte
Talvez expanda um pouco isso.
0

npm start - --reset-cache

Provavelmente a porta já está em uso. Eu enfrento um problema semelhante quando eu executo o android run-react-native e, em seguida, o npm start. Eu resolvo assim: primeiro, pegue a id do processo em execução na porta 8081: sudo lsof -i: 8081

Yohann Atticot
fonte
0

Recebi este erro na Expo porque exportei o nome do componente errado, por exemplo

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

export default Stack;
duhaime
fonte
0

Resolvi esse problema fazendo o seguinte:

  1. cd android
  2. ./gradlew clean
  3. taskkill / f / im node.exe
  4. desinstalar o aplicativo do Android
Hamid Shoja
fonte
0

Se você estiver usando máquina Windows que você precisa fazer cd android, em seguida, ./gradlew cleanem seguida, executarreact-native run-android

Forhad
fonte