React-Native: Module AppRegistry bukanlah modul yang dapat dipanggil terdaftar

114

Saat ini saya mencoba untuk menjalankan ES6 react-native-webpack-server pada emulator Android. Perbedaannya adalah saya telah mengupgrade saya package.jsondan build.grademenggunakan react 0.18.0, dan saya mendapatkan kesalahan ini saat boot. Sejauh yang saya tahu AppRegistrydiimpor dengan benar. Bahkan jika saya mengomentari kode kesalahan ini masih muncul. Ini berfungsi di iOS tanpa masalah.

Apa yang saya lakukan salah?

EDIT: Setelah mencoba boilerplate lain yang mendukung 0.18.0, saya masih menemukan masalah yang sama.

masukkan deskripsi gambar di sini

Dustin
sumber
Saya mengalami masalah yang sama dengan 0,19 dan 0,20, saya telah mencoba segalanya tetapi tidak berhasil: '(Ada pembaruan @Dustin?
Shprink
@Shprink Saya juga mendapatkan masalah ini dengan 0.20. Juga menerima masalah iniOne of the sources for assign has an enumerable key on the prototype chain.
Josh Ferrara

Jawaban:

58

Saya baru saja memutakhirkan ke react-native 0.18.1hari ini karena mengalami beberapa masalah dependensi peer dengan 0.19.0-rcversi pra-rilis.

Kembali ke pertanyaan Anda, apa yang saya lakukan adalah

  1. cd android
  2. sudo ./gradlew clean(informasi lebih lanjut tentang cara kerja bersih di sini )

lalu kembali ke direktori kerja dan jalankan react-native run-android

Anda harus memulai ulang npm Anda juga setelah peningkatan itu.

semoga ini berhasil untuk Anda.

chinloong
sumber
3
Saya mencoba menjalankan perintah gradlew tetapi terus memberi tahu saya bahwa ia tidak dapat menemukan SDK Android meskipun saya ada ANDROID_HOMEdi jalur saya. Saya juga menambahkan local.propertiesfile dengan sdk.dir=. Ada ide?
steezeburger
43
Saat memberikan saran untuk melakukan sesuatu seperti sudo ./gradlew clean, alangkah baiknya untuk menyebutkan bahwa ini adalah operasi besar yang tampaknya mengunduh ulang dan menginstal ulang seluruh distribusi gradle.
Szczepan Hołyszewski
1
mendapatkan kesalahan Modul HMRClient bukanlah modul yang dapat dipanggil terdaftar (memanggil aktifkan). Saya tidak dapat melihat perubahan saya yang dibuat dalam file js :(
Dinesh R Rajput
Untuk menemukan lokasi Android SDK Anda, buka Android Studio dan tekan konfigurasi, Anda akan melihat jalur di bagian atas yang mungkin seperti ini:/Users/karim/Library/Android/sdk
Karim Mortabit
ini tidak melakukan apa-apa bagi saya setelah saya mencoba memperbarui ke RN 0,44
SleepsOnNewspapers
15

Saya memiliki masalah yang sama di iOS dan penyebabnya bagi saya adalah index.ios.js saya salah (karena saya menyalin-tempel salah satu contoh tanpa melihat isinya), itu diakhiri dengan deklarasi ekspor modul

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

Bukan seperti yang diharapkan

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

Anda bisa memiliki masalah yang sama di android dengan index.android.js saya kira.

jolivier.dll
sumber
13

Salah satu alasan utama dari masalah ini mungkin karena Anda memasang plugin dan lupa menautkannya .

coba ini:

react-native link

Jalankan ulang aplikasi Anda.

Semoga ini bisa membantu. Tolong beri tahu saya di komentar . Terima kasih.

iDevAmit
sumber
1
Berjalan react-native linktanpa nama paket tidak digunakan lagi dan akan dihapus di rilis berikutnya.
Harshad Madaye
9

Saya memecahkan masalah ini hanya dengan menambahkan

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

ke index.js saya

pastikan ini ada di index.js Anda

Omar Samman
sumber
3

Bagi saya, masalah saya adalah memasukkan file entri yang salah saat membundel.

Saya menggunakan App.js sebagai file entri saya, maka App tidak dapat menemukan AppRegistry

Benar:

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/

Salah:

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
sumber
Anda menyelamatkan otak saya ... itu adalah hari-hari saya mencoba memahami mengapa jika saya meluncurkan perintah: 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 semuanya bekerja, sementara sebaliknya jika saya menerbitkan dengan fastlane aplikasi macet dengan kesalahan ini: Module AppRegistry is not a registered callable module (calling runApplication) Di build.gradle yang saya punya, mungkin kotoran, entriFile yang salah! Terima kasih lagi!
Nobady
3

Semoga ini bisa menyelamatkan sakit kepala seseorang. Saya mendapat kesalahan ini setelah meningkatkan versi react-native saya. Membingungkan itu hanya muncul di sisi android sesuatu.

Struktur file saya mencakup index.ios.jsdan index.android.js. Keduanya mengandung kode:

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

Apa yang harus saya lakukan adalah, dalam android/app/src/main/java/com/{projectName}/MainApplication.java, berubah indexmenjadi index.android:

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

Kemudian app/build/build.gradle, ubah entryFiledari index.jsmenjadiindex.android.js

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

Saya tidak tahu mengapa, tetapi ketika saya memindahkan AppRegistry.registerComponent dari file index.js yang disertakan dalam index.android.js untuk langsung berada di dalam index.android.js, tampaknya berfungsi.

sofou
sumber
1

Jika Anda menggunakan beberapa contoh, mereka mungkin tidak berfungsi

Ini versi saya untuk tampilan gulir

/**
 * 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);
pengguna6223605
sumber
1

Saya mencopotnya di Genymotion. Kemudian jalankan react-native run-androiduntuk membangun aplikasi. Dan itu berhasil. Cobalah ini dulu sebelum berlari sudo ./gradlew clean, ini akan menghemat banyak waktu.

kklw
sumber
1

restart packager bekerja untuk saya. bunuh saja react native packager dan jalankan lagi.

Ahmad Dehnavi
sumber
1

jika Anda menghadapi kesalahan ini di windows dengan android

buka folder aplikasi direktori root Anda dan pindah ke folder android.

     cd android 
     gradlew clean

mulai aplikasi Anda lagi react-native run-android

bhooom itu berhasil

NuMan Ijaz
sumber
0

Dalam kasus saya, saya index.jshanya menunjuk ke js lain daripada js Launcher saya secara keliru, yang tidak mengandung AppRegistry.registerComponent().

Jadi, pastikan file index.jspoin Anda untuk mendaftarkan kelas tersebut.

yao
sumber
0

Masalah saya telah diperbaiki dengan meningkatkan inotify max_user_watches saya:

sudo sysctl fs.inotify.max_user_watches=1280000
spektralsun
sumber
0

Bagi saya itu adalah masalah dengan ketergantungan react-native pada versi berikutnya dari paket react, sementara di package.json saya yang lama ditentukan. Mengupgrade versi react saya memecahkan masalah ini.

membutuhkan
sumber
0

Bagi saya, saya hanya menghubungkan dengan react native seperti ini: link react-native

Asma_Kh
sumber
Mungkin perluas ini sedikit.
0

npm start - --reset-cache

Mungkin port sudah digunakan. Saya menghadapi masalah serupa ketika saya pertama kali menjalankan react-native run-android dan kemudian npm start. Saya menyelesaikannya seperti ini: Pertama, dapatkan id dari proses yang berjalan di port 8081: sudo lsof -i: 8081

Yohann Atticot
sumber
0

Saya mendapat kesalahan ini di Expo karena saya telah mengekspor nama komponen yang salah, mis

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

export default Stack;
duhaime
sumber
0

Saya memecahkan masalah ini dengan melakukan hal berikut:

  1. cd android
  2. ./gradlew clean
  3. taskkill / f / im node.exe
  4. uninstall aplikasi dari android
Hamid Shoja
sumber
0

Jika Anda menggunakan mesin windows Anda perlu melakukan cd androiditu ./gradlew cleankemudian jalankanreact-native run-android

Forhad
sumber