React-Native: Module AppRegistry ไม่ใช่โมดูลที่เรียกได้ที่ลงทะเบียน


114

ฉันกำลังพยายามให้ES6 react-native-webpack-serverทำงานบนโปรแกรมจำลอง Android ความแตกต่างคือฉันได้อัปเกรดpackage.jsonและbuild.gradeใช้การตอบสนอง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.
Josh Ferrara

คำตอบ:


58

ฉันเพิ่งอัปเกรดเป็น react-native 0.18.1ในวันนี้ซึ่งมีปัญหาการพึ่งพาเพียร์กับ0.19.0-rcเวอร์ชันก่อนเผยแพร่

กลับไปที่คำถามของคุณสิ่งที่ฉันทำคือ

  1. cd android
  2. sudo ./gradlew clean(ข้อมูลเพิ่มเติมเกี่ยวกับการทำความสะอาดที่นี่ )

จากนั้นกลับไปที่ไดเร็กทอรีการทำงานและเรียกใช้ react-native run-android

คุณควรรีสตาร์ท npm ของคุณด้วยหลังจากการอัพเกรดนั้น

หวังว่านี่จะเหมาะกับคุณ


3
ฉันพยายามเรียกใช้คำสั่ง gradlew แต่มันบอกฉันอยู่เสมอว่ามันไม่พบ Android SDK แม้ว่าฉันจะANDROID_HOMEอยู่ในเส้นทางก็ตาม ฉันยังเพิ่มlocal.propertiesไฟล์ด้วยsdk.dir=. ความคิดใด ๆ ?
steezeburger

43
เมื่อให้คำแนะนำในการทำสิ่งที่ชอบsudo ./gradlew cleanจะเป็นการดีที่จะกล่าวถึงว่าเป็นการดำเนินการขนาดใหญ่ที่เห็นได้ชัดว่ามีการดาวน์โหลดซ้ำและติดตั้งการกระจายแบบไล่ระดับใหม่ทั้งหมด
Szczepan Hołyszewski

1
ได้รับข้อผิดพลาด Module HMRClient ไม่ใช่โมดูลที่โทรได้ที่ลงทะเบียนไว้ (เปิดใช้งานการโทร) ฉันไม่เห็นการเปลี่ยนแปลงของฉันที่เกิดขึ้นในไฟล์ js :(
Dinesh R Rajput

หากต้องการค้นหาตำแหน่ง Android SDK ของคุณให้เปิด Android Studio และกดกำหนดค่าคุณจะเห็นเส้นทางที่ด้านบนซึ่งอาจเป็นดังนี้:/Users/karim/Library/Android/sdk
Karim Mortabit

สิ่งนี้ไม่ได้ทำอะไรให้ฉันเลยหลังจากที่ฉันพยายามอัปเดตเป็น RN 0.44
SleepsOnNewspapers

15

ฉันมีปัญหาเดียวกันบน iOS และสาเหตุของฉันคือindex.ios.jsของฉันไม่ถูกต้อง (เพราะฉันคัดลอกหนึ่งในตัวอย่างโดยไม่ได้ดูเนื้อหา) มันลงท้ายด้วยการประกาศการส่งออกโมดูล

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

แทนที่จะเป็นที่คาดหวัง

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

คุณอาจมีปัญหาเดียวกันใน Android กับ index.android.js ฉันเดา


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

หวังว่าสิ่งนี้จะช่วยให้ใครบางคนปวดหัวได้ ฉันได้รับข้อผิดพลาดนี้หลังจากอัปเกรดเวอร์ชันตอบสนองเนทีฟ มันปรากฏในด้าน Android ของสิ่งต่าง ๆ อย่างสับสน

โครงสร้างไฟล์ของฉันรวมถึงและindex.ios.js index.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.jsเป็นindex.android.js

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

3

สำหรับฉันเพียงแค่รีสตาร์ทคอมพิวเตอร์เท่านั้นที่แก้ไขได้ (ข้อผิดพลาดของฉันคือ "module appRegistry ไม่ใช่โมดูลที่เรียกได้ที่ลงทะเบียนไว้ (เรียก runapplication) js engine: hermes")

คำตอบยอดนิยมอีกประการหนึ่งที่ขาดหายไปที่นี่และอาจใช้งานได้ก็เพียงเพื่อฆ่ากระบวนการโหนด:

killall -9 node

[ Module AppRegistry ไม่ได้ลงทะเบียนโมดูลที่เรียกได้ (เรียกใช้ runApplication) ]


2

ฉันไม่รู้ว่าทำไม แต่เมื่อฉันย้าย AppRegistry.registerComponent จากไฟล์ index.js ที่รวมอยู่ใน index.android.js ไปอยู่ใน 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

รีสตาร์ท packagerทำงานให้ฉัน เพียงแค่ฆ่าตอบสนองแพ็คเกอร์พื้นเมืองแล้วเรียกใช้อีกครั้ง


1

หากคุณพบข้อผิดพลาดนี้ใน windows ที่มี Android

เปิดโฟลเดอร์แอปไดเรกทอรีรากของคุณและย้ายไปที่โฟลเดอร์ android

     cd android 
     gradlew clean

เริ่มแอปของคุณอีกครั้งตอบสนองพื้นเมืองรัน Android

bhooom มันใช้งานได้


0

ในกรณีของฉันของฉันindex.jsจุดเพียงเพื่อ js แทนการเปิดของฉันอีก js AppRegistry.registerComponent()ผิดพลาดที่ไม่ได้มี

ดังนั้นตรวจสอบให้แน่ใจว่าไฟล์ที่คุณindex.jsต้องการลงทะเบียนชั้นเรียน


0

ปัญหาของฉันได้รับการแก้ไขโดยการเพิ่ม inotify max_user_watches ของฉัน:

sudo sysctl fs.inotify.max_user_watches=1280000

0

สำหรับฉันมันเป็นปัญหาเกี่ยวกับการพึ่งพาการตอบสนองแบบเนทีฟบนแพ็คเกจการตอบสนองเวอร์ชันถัดไปในขณะที่ใน package.json ของฉันมีการระบุอันเก่า การอัปเกรดเวอร์ชันตอบสนองของฉันช่วยแก้ปัญหานี้ได้


0

สำหรับฉันฉันแค่เชื่อมโยงกับ react native ด้วยวิธีนี้: react-native link


อาจจะขยายความเกี่ยวกับเรื่องนี้สักหน่อย

0

เริ่ม npm - - รีเซ็ตแคช

พอร์ตน่าจะถูกใช้งานแล้ว ฉันประสบปัญหาที่คล้ายกันเมื่อฉันเรียกใช้ react-native run-android เป็นครั้งแรกแล้วเริ่ม npm ฉันแก้ปัญหาดังนี้: ขั้นแรกรับรหัสของกระบวนการที่ทำงานในพอร์ต 8081: sudo lsof -i: 8081


0

ฉันได้รับข้อผิดพลาดนี้ในงาน Expo เนื่องจากฉันส่งออกชื่อส่วนประกอบผิดเช่น

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

export default Stack;

0

ฉันแก้ไขปัญหานี้โดยทำสิ่งต่อไปนี้:

  1. ซีดี android
  2. ./gradlew สะอาด
  3. taskkill / f / im node.exe
  4. ถอนการติดตั้งแอพจาก Android

0

หากคุณกำลังใช้เครื่อง Windows ที่คุณต้องทำcd androidแล้ว./gradlew cleanทำงานแล้วreact-native run-android

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.