React-Native: Module AppRegistry nie jest zarejestrowanym modułem wywoływalnym

114

Obecnie próbuję uzyskać serwer reagujący-natywny-webpack z ES6 działający na emulatorze Androida. Różnica polega na tym, że zaktualizowałem mój package.jsoni build.gradedo korzystania z reagowania 0.18.0i otrzymuję ten błąd podczas rozruchu. O ile wiem, AppRegistryjest importowany poprawnie. Nawet gdybym wykomentował kod, ten błąd nadal się pojawia. Działa to bez problemu na iOS.

Co ja robię źle?

EDYCJA: Po wypróbowaniu innych szablonów, które obsługują 0.18.0, wciąż napotykam ten sam problem.

wprowadź opis obrazu tutaj

Dustin
źródło
Mam ten sam problem z 0.19 i 0.20, próbowałem wszystkiego, ale bez powodzenia: '(Jakaś aktualizacja @ Dustin?
Shprink
@Shprink Mam również ten problem z 0.20. Otrzymuję również ten numerOne of the sources for assign has an enumerable key on the prototype chain.
Josh Ferrara,

Odpowiedzi:

58

właśnie zaktualizowałem do React-Native 0.18.1 Trudno jest mieć pewne problemy z zależnościami równorzędnymi w 0.19.0-rcwersji przedpremierowej.

Wracając do twojego pytania, to co zrobiłem

  1. cd android
  2. sudo ./gradlew clean (więcej informacji o tym, jak działa czyszczenie tutaj )

następnie z powrotem do katalogu roboczego i uruchom react-native run-android

po uaktualnieniu również powinieneś zrestartować swój npm.

mam nadzieję, że to działa dla Ciebie.

chinloong
źródło
3
Próbuję uruchomić polecenie gradlew, ale ciągle mówi mi, że nie może znaleźć zestawu SDK systemu Android, mimo że mam ANDROID_HOMEna swojej drodze. Dodałem również local.propertiesplik z rozszerzeniem sdk.dir=. Jakieś pomysły?
steezeburger
43
Podając radę, by zrobić coś takiego sudo ./gradlew clean, dobrze byłoby wspomnieć, że jest to ogromna operacja, która najwyraźniej ponownie pobiera i ponownie instaluje całą dystrybucję gradle.
Szczepan Hołyszewski
1
uzyskiwanie błędu Moduł HMRClient nie jest zarejestrowanym modułem wywoływalnym (wywołanie funkcji włączania). Nie widzę moich zmian, które są wprowadzane w plikach js :(
Dinesh R Rajput
Aby znaleźć lokalizację Android SDK, otwórz Android Studio i kliknij Configure, zobaczysz ścieżkę u góry, która prawdopodobnie wygląda następująco:/Users/karim/Library/Android/sdk
Karim Mortabit,
to nic dla mnie nie dało po próbie aktualizacji do RN 0,44
SleepsOnNewspapers
15

Miałem ten sam problem na iOS i powodem dla mnie było to, że mój plik index.ios.js był niepoprawny (ponieważ skopiowałem i wkleiłem jeden z przykładów bez patrzenia na jego zawartość), kończył się deklaracją eksportową modułu

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

Zamiast oczekiwanego

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

Myślę, że możesz mieć ten sam problem na Androidzie z index.android.js.

jolivier
źródło
13

Główną przyczyną tego problemu może być to, że zainstalowałbyś wtyczkę i zapomniałbyś ją połączyć .

Spróbuj tego:

react-native link

Uruchom ponownie aplikację.

Mam nadzieję, że to pomoże. Dajcie mi znać w komentarzach . Dzięki.

iDevAmit
źródło
1
Uruchomienie react-native linkbez nazwy pakietu jest przestarzałe i zostanie usunięte w następnej wersji.
Harshad Madaye
9

Rozwiązałem ten problem po prostu dodając

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

do mojego index.js

upewnij się, że istnieje w twoim index.js

Omar Samman
źródło
3

Dla mnie moim problemem było umieszczenie niewłaściwego pliku wejściowego podczas pakowania.

Używałem App.js jako mojego pliku wejściowego, dlatego aplikacja nie mogła znaleźć AppRegistry

Poprawny:

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/

Błędny:

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
źródło
uratowałeś mój mózg ... to były dni, kiedy próbowałem zrozumieć, dlaczego jeśli uruchomiłem polecenie: 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 wszystko działało, podczas gdy zamiast tego, gdy opublikowałem z fastlane, aplikacja zawiesiła się z tym błędem: Module AppRegistry is not a registered callable module (calling runApplication) W build.gradle miałem, prawdopodobnie brud, niepoprawny plik wpisu! Dzięki jeszcze raz!
Nobady,
3

Miejmy nadzieję, że to może zaoszczędzić komuś bólu głowy. Otrzymałem ten błąd po uaktualnieniu mojej wersji React-Native. Myląco pojawił się tylko po stronie androidów.

Moja struktura plików zawiera rozszerzenia index.ios.jsi index.android.js. Oba zawierają kod:

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

Musiałem android/app/src/main/java/com/{projectName}/MainApplication.javazmienić indexna index.android:

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

Następnie app/build/build.gradlezmień od entryFilez index.jsnaindex.android.js

project.ext.react = [
    entryFile: "index.android.js" // was index.js"
]
dcordz
źródło
2

Nie wiem dlaczego, ale kiedy przenoszę AppRegistry.registerComponent z pliku index.js, który jest zawarty w index.android.js, do umieszczenia bezpośrednio w index.android.js, wydaje się, że działa.

sofou
źródło
1

Jeśli używasz niektórych przykładów, mogą one nie działać

Oto moja wersja dla widoku przewijania

/**
 * 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
źródło
1

Odinstalowałem go na Genymotion. Następnie uruchom, react-native run-androidaby skompilować aplikację. I zadziałało. Spróbuj tego najpierw przed uruchomieniem sudo ./gradlew clean, zaoszczędzi ci to dużo czasu.

kklw
źródło
1

restart packager działał dla mnie. po prostu wyłącz reaguj natywny program pakujący i uruchom go ponownie.

Ahmad Dehnavi
źródło
1

jeśli napotykasz ten błąd w systemie Windows z systemem Android

Otwórz folder aplikacji w katalogu głównym i przejdź do folderu Android.

     cd android 
     gradlew clean

uruchom aplikację ponownie, react-native run-android

bhooom to działa

NuMan Ijaz
źródło
0

W moim przypadku index.jspo prostu wskazuje na inny js zamiast mojego Launchera js omyłkowo, który nie zawiera AppRegistry.registerComponent().

Więc upewnij się, że plik jest Twoim index.jscelem do zarejestrowania klasy.

yao
źródło
0

Mój problem został rozwiązany przez zwiększenie mojej inotify max_user_watches:

sudo sysctl fs.inotify.max_user_watches=1280000
spectralsun
źródło
0

Dla mnie był to problem z zależnością reag-natywną na następną wersję pakietu reagującego, podczas gdy w moim pliku package.json został określony stary. Aktualizacja wersji React rozwiązała ten problem.

wymagane
źródło
0

Dla mnie po prostu połączyłem się z React Native as w ten sposób: React-native link

Asma_Kh
źródło
Może to trochę rozwinąć.
0

npm start - --reset-cache

Prawdopodobnie port jest już używany. Mam podobny problem, gdy po raz pierwszy uruchamiam react-native run-android, a następnie uruchamiam npm. Rozwiązuję to w ten sposób: Najpierw uzyskaj identyfikator procesu działającego na porcie 8081: sudo lsof -i: 8081

Yohann Atticot
źródło
0

Otrzymałem ten błąd w Expo, ponieważ wyeksportowałem niewłaściwą nazwę komponentu, np

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

export default Stack;
duhaime
źródło
0

Rozwiązałem ten problem, wykonując następujące czynności:

  1. cd android
  2. ./gradlew czysty
  3. taskkill / f / im node.exe
  4. odinstaluj aplikację z Androida
Hamid Shoja
źródło
0

Jeśli używasz komputera z systemem Windows, musisz to zrobić, cd androida ./gradlew cleannastępnie uruchomreact-native run-android

Forhad
źródło