React-Native: Modül AppRegistry kayıtlı bir çağrılabilir modül değil


114

Şu anda bir Android öykünücüsü üzerinde çalışan ES6 react-native-webpack-server'ı almaya çalışıyorum. Aradaki fark, react'i yükseltmek package.jsonve build.gradekullanmak 0.18.0için bu hatayı önyüklemede alıyorum. Bildiğim kadarıyla AppRegistrydoğru ithal ediliyor. Kodu yorumlasam bile bu hata yine de ortaya çıkıyor. Bu, iOS'ta sorunsuz çalışır.

Neyi yanlış yapıyorum?

DÜZENLEME: 0.18.0'ı destekleyen diğer kazan plakalarını denedikten sonra, hala aynı sorunla karşılaşıyorum.

görüntü açıklamasını buraya girin


0.19 ve 0.20 ile aynı sorunu yaşıyorum, her şeyi denedim ama şansım yok: '(Herhangi bir güncelleme @Dustin?
Shprink

@Shprink 0.20 ile de bu sorunu alıyorum. Bu sayı da One of the sources for assign has an enumerable key on the prototype chain.
Josh Ferrara

Yanıtlar:


58

Ön sürümle 0.18.1ilgili bazı akran bağımlılıkları sorunları yaşarken, bugün react-native için yeni sürüme geçtim 0.19.0-rc.

Sorunuza geri dönersek, yaptığım şey

  1. cd android
  2. sudo ./gradlew clean(temizliğin nasıl çalıştığı hakkında daha fazla bilgiyi burada bulabilirsiniz )

sonra çalışma dizinine dönün ve çalıştırın react-native run-android

bu yükseltmeden sonra npm'nizi de yeniden başlatmalısınız.

umarım bu sizin için çalışır.


3
Gradlew komutunu çalıştırmaya çalışıyorum ancak yolumda olmasına rağmen Android SDK'yı bulamadığını söylüyor ANDROID_HOME. local.propertiesDosyayı ile de ekledim sdk.dir=. Herhangi bir fikir?
steezeburger

43
Böyle bir şey yapma tavsiyesini verirken, görünüşe göre tüm gradle dağıtımını yeniden indiren ve yeniden yükleyen büyük bir işlem olduğunu sudo ./gradlew cleanbelirtmek güzel olurdu .
Szczepan Hołyszewski

1
hata alma Modül HMRClient kayıtlı bir çağrılabilir modül değil (etkinleştirmeyi çağırma). Js dosyalarında yapılan değişikliklerimi göremiyorum :(
Dinesh R Rajput

Android SDK konumunuzu bulmak için, Android Studio'yu açın ve yapılandır'a basın, en üstte muhtemelen /Users/karim/Library/Android/sdk
şuna

RN
0.44'e

15

IOS'ta da aynı sorunu yaşadım ve benim için neden index.ios.js'imin yanlış olmasıydı (çünkü örneklerden birini içeriğine bakmadan kopyalayıp yapıştırdım), bir modül dışa aktarma bildirimi ile bitiyordu

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

Beklenen yerine

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

Android'de index.android.js ile aynı sorunu yaşayabilirsiniz sanırım.


13

Bir ana Bu sorunun nedeni nerede olabilir bir eklenti yüklü ve bağlamak için unutmak olurdu .

bunu dene:

react-native link

Uygulamanızı yeniden çalıştırın.

Umarım bu yardımcı olur. Lütfen yorumlarda bana bildirin . Teşekkürler.


1
react-native linkPaket adı olmadan çalıştırmak kullanımdan kaldırıldı ve bir sonraki sürümde kaldırılacak.
Harshad Madaye

9

Bu sorunu sadece ekleyerek çözdüm

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

Benim için index.js

bunun index.js'de mevcut olduğundan emin olun


3

Benim için sorunum, gruplama sırasında yanlış giriş dosyasını koymaktı.

Giriş dosyam olarak App.js kullanıyordum, bu nedenle Uygulama AppRegistry'i bulamadı

Doğru:

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/

Yanlış:

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/

Beynimi kurtardın ... komutu başlatırsam neden anlamaya çalıştığım günlerdi: 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 her şey çalıştı, bunun yerine Module AppRegistry is not a registered callable module (calling runApplication) fastlane ile yayınlarsam uygulama şu hatayla çöktü: build.gradle'da muhtemelen kir vardı, yanlış bir girişDosya! Tekrar teşekkürler!
nobady

3

Umarım bu birisinin baş ağrısından kurtarabilir. React-native sürümümü yükselttikten sonra bu hatayı aldım. Kafa karıştırıcı bir şekilde, şeylerin yalnızca android tarafında göründü.

Dosya yapım bir index.ios.jsve bir index.android.js. Her ikisi de kodu içerir:

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

Ne yapmak zorunda içinde oldu android/app/src/main/java/com/{projectName}/MainApplication.java, değişim indexiçin index.android:

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

Sonra içinde app/build/build.gradle, değiştirmek entryFilegelen index.jsetmekindex.android.js

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


2

Nedenini bilmiyorum, ancak AppRegistry.registerComponent'i index.android.js'de bulunan index.js dosyasından direkt olarak index.android.js'nin içinde yer alacak şekilde taşıdığımda işe yarıyor gibi görünüyor.


1

Bazı örnekleri kullanıyorsanız işe yaramayabilirler

İşte kaydırma görünümü sürümüm

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

Genymotion'da kaldırdım. Ardından react-native run-androiduygulamayı oluşturmak için çalıştırın . Ve işe yaradı. Bunu koşmadan önce deneyin sudo ./gradlew clean, size çok zaman kazandıracaktır.


1

yeniden başlat paketleyici benim için çalıştı. sadece yerel paketleyiciyi öldürüp tekrar çalıştırın.


1

android ile pencerelerde bu hatayla karşılaşıyorsanız

kök dizin uygulama klasörünüzü açın ve android klasörüne taşıyın.

     cd android 
     gradlew clean

uygulamanızı yeniden başlatın react-native run-android

bhooom işe yarıyor


0

Benim durumumda, index.jsyanlışlıkla benim Launcher js yerine başka bir js'yi işaret ediyorum, bu da içermiyor AppRegistry.registerComponent().

Bu nedenle, index.jssınıfı kaydettirmek için başvurduğunuz dosyadan emin olun .


0

Sorunum, inotify max_user_watches'ımı artırarak çözüldü:

sudo sysctl fs.inotify.max_user_watches=1280000

0

Benim için bu, react paketinin sonraki sürümünde react-native bağımlılığı ile ilgili bir sorundu, benim package.json'umda ise eskisi belirtildi. React sürümümü yükseltmek bu sorunu çözdü.


0

Benim için sadece yerel ile şu şekilde bağlantı kurdum: react-native link


Belki bunu biraz genişletebiliriz.

0

npm start - --reset-cache

Muhtemelen bağlantı noktası zaten kullanılıyor. React-native run-android'i ilk çalıştırdığımda ve ardından npm başladığında benzer bir sorunla karşılaşıyorum. Bunu şu şekilde çözüyorum: İlk önce 8081 numaralı bağlantı noktasında çalışan işlemin kimliğini alın: sudo lsof -i: 8081


0

Bu hatayı Expo'da aldım çünkü yanlış bileşen adını ihraç etmiştim, örn.

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

export default Stack;

0

Aşağıdakileri yaparak bu sorunu çözdüm:

  1. cd android
  2. ./gradlew temiz
  3. taskkill / f / im node.exe
  4. uygulamayı android'den kaldır

0

Windows makinesi kullanıyorsanız, yapmanız gereken cd androiddaha ./gradlew cleansonra çalıştırınreact-native run-android

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.