React-Native: Mô-đun AppRegistry không phải là một mô-đun có thể gọi đã đăng ký


114

Tôi hiện đang cố gắng chạy máy chủ react-native-webpack-ES6 trên trình giả lập Android. Sự khác biệt là tôi đã nâng cấp package.jsonbuild.gradesử dụng react 0.18.0, và gặp lỗi này khi khởi động. Theo như tôi biết AppRegistryđược nhập chính xác. Ngay cả khi tôi đã nhận xét ra mã, lỗi này vẫn xuất hiện. Điều này hoạt động trên iOS mà không có vấn đề gì.

Tôi đang làm gì sai?

CHỈNH SỬA: Sau khi thử các bảng điện tử khác hỗ trợ 0.18.0, tôi vẫn gặp phải vấn đề tương tự.

nhập mô tả hình ảnh ở đây


Tôi đang gặp vấn đề tương tự với 0,19 và 0,20, tôi đã thử mọi thứ nhưng không may mắn: '(Có bản cập nhật nào @Dustin không?
Shprink

@Shprink Tôi cũng gặp sự cố này với 0,20. Cũng nhận được vấn đề nàyOne of the sources for assign has an enumerable key on the prototype chain.
Josh Ferrara

Câu trả lời:


58

Tôi vừa nâng cấp lên bản gốc phản ứng 0.18.1ngày hôm nay, khó có thể gặp một số vấn đề về phụ thuộc ngang hàng với 0.19.0-rcphiên bản trước khi phát hành.

Quay lại câu hỏi của bạn, những gì tôi đã làm là

  1. cd android
  2. sudo ./gradlew clean(thông tin thêm về cách hoạt động của sạch tại đây )

sau đó quay lại thư mục làm việc và chạy react-native run-android

bạn cũng nên khởi động lại npm sau khi nâng cấp đó.

hy vọng điều này làm việc cho bạn.


3
Tôi đang cố gắng chạy lệnh gradlew nhưng nó liên tục cho tôi biết rằng nó không thể tìm thấy SDK Android mặc dù tôi có ANDROID_HOMEtrong đường dẫn của mình. Tôi cũng đã thêm local.propertiestệp với sdk.dir=. Có ý kiến ​​gì không?
steezeburger 14/02/16

42
Khi đưa ra lời khuyên để làm điều gì đó như thế sudo ./gradlew clean, sẽ rất tốt khi đề cập rằng đó là một hoạt động rất lớn dường như tải xuống lại và cài đặt lại toàn bộ bản phân phối gradle.
Szczepan Hołyszewski

1
nhận được lỗi Mô-đun HMRClient không phải là mô-đun có thể gọi đã đăng ký (cho phép gọi). Tôi không thể thấy những thay đổi của mình, những thay đổi đó được thực hiện trong tệp js :(
Dinesh R Rajput

Để tìm vị trí Android SDK của bạn, mở Android Studio và nhấn configure, bạn sẽ thấy một con đường ở phía trên mà có lẽ cái gì đó như:/Users/karim/Library/Android/sdk
Karim Mortabit

điều này không làm gì với tôi sau khi tôi cố gắng cập nhật lên RN 0,44
SleepsOnNewspapers

15

Tôi đã gặp vấn đề tương tự trên iOS và nguyên nhân đối với tôi là index.ios.js của tôi không chính xác (vì tôi đã sao chép một trong các ví dụ mà không xem nội dung của nó), nó kết thúc bằng khai báo xuất mô-đun

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

Thay vì mong đợi

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

Tôi đoán bạn có thể gặp vấn đề tương tự trên Android với index.android.js.


13

Một trong những lý do chính của vấn đề này có thể là do bạn đã cài đặt một plugin và quên liên kết nó .

thử cái này:

react-native link

Chạy lại ứng dụng của bạn.

Hy vọng điều này sẽ giúp ích. Vui lòng cho tôi biết trong phần bình luận . Cảm ơn.


1
Chạy react-native linkkhông có tên gói không được dùng nữa và sẽ bị xóa trong bản phát hành tiếp theo.
Harshad Madaye

9

Tôi đã giải quyết vấn đề này chỉ bằng cách thêm

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

vào index.js của tôi

đảm bảo điều này tồn tại trong index.js của bạn


3

Đối với tôi, vấn đề của tôi là đặt sai tệp mục nhập khi nhóm.

Tôi đang sử dụng App.js làm tệp mục nhập của mình, do đó Ứng dụng không thể tìm thấy AppRegistry

Chính xác:

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/

Sai:

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/

bạn đã lưu não của tôi ... đó là ngày tôi đã cố gắng tìm hiểu lý do tại sao nếu tôi đưa ra lệnh: 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 tất cả mọi thứ đã làm việc, trong khi thay vì nếu tôi công bố với Fastlane ứng dụng bị rơi với lỗi này: Module AppRegistry is not a registered callable module (calling runApplication) Trong build.gradle tôi đã có, có lẽ là bụi bẩn, một mục nhập không chính xác Cảm ơn một lần nữa!
Nobady

3

Hy vọng rằng điều này có thể cứu ai đó đang đau đầu. Tôi gặp lỗi này sau khi nâng cấp phiên bản gốc phản ứng của mình. Thật khó hiểu là nó chỉ xuất hiện trên mặt android của mọi thứ.

Cấu trúc tệp của tôi bao gồm một index.ios.jsvà một index.android.js. Cả hai đều chứa mã:

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

Những gì tôi phải làm, trong đó android/app/src/main/java/com/{projectName}/MainApplication.java, thay đổi indexthành index.android:

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

Sau đó app/build/build.gradle, thay đổi entryFiletừ index.jsthànhindex.android.js

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

3

Đối với tôi chỉ cần khởi động lại máy tính là đã khắc phục được. (Lỗi của tôi là "module appRegistry không phải là một module có thể gọi đã đăng ký (gọi runapplication) js engine: hermes")

Một câu trả lời hàng đầu khác bị thiếu ở đây và có thể đã hoạt động chỉ là để giết các quy trình nút:

killall -9 node

[ Mô-đun AppRegistry không phải là mô-đun có thể gọi được đăng ký (gọi runApplication) ]


2

Tôi không biết tại sao, nhưng khi tôi di chuyển AppRegistry.registerComponent từ tệp index.js có trong index.android.js sang trực tiếp bên trong index.android.js, nó dường như hoạt động.


1

Nếu bạn đang sử dụng một số ví dụ, chúng có thể không hoạt động

Đây là phiên bản của tôi cho chế độ xem cuộn

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

Tôi đã gỡ cài đặt nó trên Genymotion. Sau đó chạy react-native run-androidđể xây dựng ứng dụng. Va no đa hoạt động. Hãy thử điều này trước khi chạy sudo ./gradlew clean, nó sẽ giúp bạn tiết kiệm rất nhiều thời gian.


1

khởi động lại gói làm việc cho tôi. chỉ cần giết trình đóng gói gốc phản ứng và chạy lại.


1

nếu bạn gặp phải lỗi này trong windows với android

mở thư mục ứng dụng thư mục gốc của bạn và chuyển vào thư mục android.

     cd android 
     gradlew clean

khởi động lại ứng dụng của bạn react-native run-android

bhooom nó hoạt động


0

Trong trường hợp của tôi, tôi index.jschỉ trỏ đến js khác thay vì js Launcher của tôi do nhầm lẫn, không chứa AppRegistry.registerComponent().

Vì vậy, hãy chắc chắn rằng hồ sơ của bạn index.jsđể đăng ký lớp học.


0

Sự cố của tôi đã được khắc phục bằng cách tăng inotify max_user_watches:

sudo sysctl fs.inotify.max_user_watches=1280000

0

Đối với tôi, đó là một vấn đề với sự phụ thuộc của react-native vào phiên bản tiếp theo của gói react, trong khi trong package.json của tôi, cái cũ đã được chỉ định. Nâng cấp phiên bản phản ứng của tôi đã giải quyết được vấn đề này.


0

Đối với tôi, tôi chỉ liên kết với react native theo cách này: liên kết react-native


Có thể mở rộng về điều này một chút.

0

npm start - --reset-cache

Có lẽ cổng đã được sử dụng. Tôi gặp phải vấn đề tương tự khi lần đầu tiên tôi chạy react-native run-android và sau đó bắt đầu npm. Tôi giải quyết nó như thế này: Đầu tiên, lấy id của quá trình đang chạy trong cổng 8081: sudo lsof -i: 8081


0

Tôi gặp lỗi này trong Expo vì tôi đã xuất sai tên thành phần, ví dụ:

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

export default Stack;

0

Tôi đã giải quyết vấn đề này bằng cách làm như sau:

  1. cd android
  2. ./gradlew sạch
  3. taskkill / f / im node.exe
  4. gỡ cài đặt ứng dụng khỏi android

0

Nếu bạn đang sử dụng máy tính windows bạn cần làm cd androidsau ./gradlew cleanđó chạyreact-native run-android

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.