React-Native : 모듈 AppRegistry는 등록 된 호출 가능 모듈이 아닙니다.


114

현재 Android 에뮬레이터 에서 ES6 react-native-webpack-server를 실행 하려고합니다 . 차이점은 내가 업그레이드 package.json하고 build.gradereact을 사용 0.18.0하고 부팅 시이 오류가 발생 한다는 것 입니다. 내가 아는 AppRegistry한 올바르게 가져옵니다. 코드를 주석 처리하더라도이 오류는 여전히 발생합니다. 이것은 문제없이 iOS에서 작동합니다.

내가 뭘 잘못하고 있죠?

편집 : 0.18.0을 지원하는 다른 상용구를 시도한 후에도 동일한 문제가 계속 발생합니다.

여기에 이미지 설명 입력


나는 0.19와 0.20에서 같은 문제를 겪고있다. 나는 모든 것을 시도했지만 운이 없다 : '(모든 업데이트 @Dustin?
Shprink

@Shprink 0.20 에서도이 문제가 발생합니다. 또한이 문제를 수신One of the sources for assign has an enumerable key on the prototype chain.
조쉬 페라라

답변:


58

나는 0.18.1오늘 0.19.0-rc시험판 버전에서 피어 종속성 문제가 발생 하여 react-native로 업그레이드했습니다 .

귀하의 질문으로 돌아가서 제가 한 것은

  1. cd android
  2. sudo ./gradlew clean(클린 작동 방식에 대한 자세한 정보는 여기 )

그런 다음 작업 디렉토리로 돌아가서 실행하십시오. react-native run-android

업그레이드 후에도 npm을 다시 시작해야합니다.

이것이 당신을 위해 작동하기를 바랍니다.


3
gradlew 명령을 실행하려고하는데 ANDROID_HOME내 경로에 있지만 Android SDK를 찾을 수 없다는 메시지가 계속 표시 됩니다. 또한 추가 local.properties로 파일을 sdk.dir=. 어떤 아이디어?
steezeburger

42
와 같은 작업을 수행하라는 조언을 할 때 전체 gradle 배포판을 분명히 다시 다운로드하고 다시 설치 sudo ./gradlew clean하는 거대한 작업이라는 점을 언급하는 것이 좋습니다.
Szczepan Hołyszewski

1
오류 발생 모듈 HMRClient는 등록 된 호출 가능 모듈이 아닙니다 (호출 활성화). js 파일에서 변경된 내용을 볼 수 없습니다 :(
Dinesh R Rajput

안드로이드 SDK의 위치를 찾으려면, 개방 안드로이드 스튜디오와 히트 구성, 당신은 아마 같은 것입니다 상단의 경로를 볼 수 있습니다 :/Users/karim/Library/Android/sdk
카림 Mortabit

내가 RN 0.44로 업데이트를 시도한 후 이것은 아무것도하지 않았습니다.
SleepsOnNewspapers

15

나는 iOS에서 동일한 문제가 있었고 그 원인은 내 index.ios.js 가 잘못 되었다는 것입니다 (내용을 보지 않고 예제 중 하나를 복사하여 붙여 넣었 기 때문에) 모듈 내보내기 선언으로 끝났습니다.

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

예상 대신

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

내가 추측하는 index.android.js를 사용하여 Android에서 동일한 문제가 발생할 수 있습니다.


13

한 주 이 문제의 원인은 어디에있을 수 는 플러그인을 설치하고 연결하는 것을 잊지 것이다 .

이 시도:

react-native link

앱을 다시 실행하십시오.

이것이 도움이되기를 바랍니다. 댓글로 알려주세요 . 감사.


1
react-native link패키지 이름없이 실행하는 것은 더 이상 사용되지 않으며 다음 릴리스에서 제거됩니다.
Harshad Madaye

9

이 문제를 해결하려면

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

index.js에

이것이 index.js 에 있는지 확인하십시오.


3

나에게 내 문제는 번들링 할 때 잘못된 항목 파일을 넣는 것이었다 .

App.js를 내 항목 파일로 사용하고 있었으므로 앱에서 AppRegistry를 찾을 수 없습니다.

옳은:

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/

틀림 :

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/

당신은 내 두뇌를 구했습니다 ... 명령을 시작하면 왜인지 이해하려고 노력한 날이었습니다. 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 모든 것이 작동했지만 대신 fastlane으로 게시하면 앱이 다음 오류와 함께 충돌했습니다 Module AppRegistry is not a registered callable module (calling runApplication) .build.gradle에서 아마도 먼지가 있었을 것입니다. 잘못된 entryFile! 다시 한 번 감사드립니다!
Nobady

3

바라건대 이것은 누군가에게 두통을 덜어 줄 수 있습니다. 반응 네이티브 버전을 업그레이드 한 후이 오류가 발생했습니다. 혼란스럽게도 그것은 사물의 안드로이드 측면에서만 나타났습니다.

내 파일 구조에는 index.ios.jsindex.android.js. 둘 다 코드를 포함합니다.

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

내가해야 할 일은에서 다음 android/app/src/main/java/com/{projectName}/MainApplication.java과 같이 변경 index하는 것입니다 index.android.

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

그런 다음에 app/build/build.gradle의 변경 entryFile에서 index.jsindex.android.js

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


2

이유는 모르겠지만 index.android.js에 포함 된 index.js 파일에서 AppRegistry.registerComponent를 index.android.js에 직접 상주하도록 이동하면 작동하는 것 같습니다.


1

일부 예제를 사용하는 경우 작동하지 않을 수 있습니다.

스크롤보기 용 버전입니다.

/**
 * 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에서 제거했습니다. 그런 다음 실행 react-native run-android하여 앱을 빌드하십시오. 그리고 그것은 효과가있었습니다. 실행하기 전에 먼저 시도하면 sudo ./gradlew clean많은 시간을 절약 할 수 있습니다.


1

다시 시작 패키저 가 나를 위해 일했습니다. 반응 네이티브 패키저를 죽이고 다시 실행하십시오.


1

Android가 설치된 Windows 에서이 오류가 발생하는 경우

루트 디렉토리 앱 폴더를 열고 android 폴더로 이동하십시오.

     cd android 
     gradlew clean

앱을 다시 시작하십시오 react-native run-android

쾅 작동


0

제 경우에는 index.js실수로 내 Launcher js 대신 다른 js를 가리 킵니다 AppRegistry.registerComponent().

따라서 index.js클래스를 등록하려면 파일을 확인하십시오 .


0

내 inotify max_user_watches를 늘려 내 문제가 해결되었습니다.

sudo sysctl fs.inotify.max_user_watches=1280000

0

저에게는 다음 버전의 반응 패키지에 대한 반응 네이티브 종속성 문제 였지만 package.json에서는 이전 버전이 지정되었습니다. 내 반응 버전을 업그레이드하면이 문제가 해결되었습니다.


0

나를 위해 나는 이런 식으로 반응 네이티브와 연결했습니다 : 반응 네이티브 링크


아마도 이것에 대해 조금 확장하십시오.

0

npm 시작---reset-cache

아마도 포트가 이미 사용 중일 것입니다. react-native run-android를 처음 실행 한 다음 npm을 시작할 때 비슷한 문제가 발생합니다. 다음과 같이 해결합니다. 먼저 포트 8081에서 실행중인 프로세스의 ID를 가져옵니다. sudo lsof -i : 8081


0

예를 들어 잘못된 구성 요소 이름을 내 보냈기 때문에 Expo에서이 오류가 발생했습니다.

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

export default Stack;

0

다음을 수행하여이 문제를 해결했습니다.

  1. cd 안드로이드
  2. ./gradlew clean
  3. taskkill / f / im node.exe
  4. 안드로이드에서 앱 제거

0

Windows 시스템을 사용하는 경우 cd android다음 ./gradlew clean을 실행 해야 합니다.react-native run-android

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.