React-Native: модуль AppRegistry не является зарегистрированным вызываемым модулем

114

В настоящее время я пытаюсь запустить ES6 response-native-webpack-server на эмуляторе Android. Разница в том, что я обновил свой package.jsonи build.gradeдля использования реакции 0.18.0и получаю эту ошибку при загрузке. Насколько мне известно AppRegistry, импортирован правильно. Даже если я закомментирую код, эта ошибка все равно появится. Это работает на iOS без проблем.

Что я делаю не так?

РЕДАКТИРОВАТЬ: Попробовав другие шаблоны, которые поддерживают 0.18.0, я все еще сталкиваюсь с той же проблемой.

введите описание изображения здесь

Dustin
источник
У меня такая же проблема с 0.19 и 0.20, я пробовал все, но безуспешно: '(Есть обновления @Dustin?
Shprink
@Shprink У меня тоже проблема с 0.20. Также получил этот выпускOne of the sources for assign has an enumerable key on the prototype chain.
Джош Феррара

Ответы:

58

Я только что обновился до react-native 0.18.1сегодня, и у меня возникли проблемы с зависимостями от других пользователей в 0.19.0-rcпредварительной версии.

Возвращаясь к вашему вопросу, я сделал

  1. cd android
  2. sudo ./gradlew clean(подробнее о том, как работает clean здесь )

затем вернитесь в рабочий каталог и запустите react-native run-android

вы должны перезапустить и свой npm после этого обновления.

Надеюсь, что это работает для вас.

чинлун
источник
3
Я пытаюсь запустить команду gradlew, но она продолжает говорить мне, что не может найти Android SDK, даже если у меня есть ANDROID_HOMEна моем пути. Я также добавил local.propertiesфайл с расширением sdk.dir=. Любые идеи?
steezeburger
43
Давая совет сделать что-то подобное sudo ./gradlew clean, было бы неплохо упомянуть, что это огромная операция, которая, по-видимому, повторно загружает и переустанавливает весь дистрибутив Gradle.
Szczepan Hołyszewski
1
получение ошибки Модуль HMRClient не является зарегистрированным вызываемым модулем (включение вызова). Я не могу видеть свои изменения, сделанные в файлах js :(
Динеш Р. Раджпут,
Чтобы найти местоположение вашего Android SDK, откройте Android Studio и нажмите configure, вы увидите вверху путь, который, вероятно, выглядит примерно так:/Users/karim/Library/Android/sdk
Карим Мортабит,
это ничего не сделало для меня после того, как я попытался обновиться до 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

Перезапустите ваше приложение.

Надеюсь, это поможет. Пожалуйста, дайте мне знать в комментариях . Спасибо.

iDevAmit
источник
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/
Tywhang
источник
вы спасли мой мозг ... это были дни, когда я пытался понять, почему, если я запустил команду: 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 у меня, вероятно, была грязь, неправильная запись файла! Еще раз спасибо!
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"
]
dcordz
источник
3

Для меня просто перезагрузка компьютера исправила это. (Моя ошибка заключалась в том, что «модуль appRegistry не является зарегистрированным вызываемым модулем (вызывающим приложение runapplication) js engine: hermes»)

Другой важный ответ, который здесь отсутствует и который мог бы сработать, заключался в том, чтобы просто убить процессы узла:

killall -9 node

[ Модуль 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);
user6223605
источник
1

Я удалил его на Genymotion. Затем запустите, react-native run-androidчтобы собрать приложение. И это сработало. Обязательно попробуйте это перед запуском sudo ./gradlew clean, это сэкономит вам много времени.

kklw
источник
1

перезапуск упаковщика работал у меня. просто убейте реагирующий родной упаковщик и запустите его снова.

Ахмад Дехнави
источник
1

если вы столкнулись с этой ошибкой в ​​Windows с Android

откройте папку приложения в корневом каталоге и перейдите в папку Android.

     cd android 
     gradlew clean

снова запустите приложение, реагируйте на запуск Android

бух, это работает

NuMan Ijaz
источник
0

В моем случае я index.jsпросто ошибочно указывает на другой js вместо моего Launcher js, который не содержит AppRegistry.registerComponent().

Итак, убедитесь, что файл вашей index.jsточки для регистрации класса.

яо
источник
0

Моя проблема была исправлена ​​путем увеличения моего inotify max_user_watches:

sudo sysctl fs.inotify.max_user_watches=1280000
спектральное солнце
источник
0

Для меня это была проблема с зависимостью от реакции на следующую версию пакета реакции, а в моем package.json была указана старая. Обновление моей версии реакции решило эту проблему.

требование
источник
0

Для меня я просто связался с реагировать на родной код следующим образом: реакция на родную ссылку

Асма_Х
источник
Может быть, немного поподробнее.
0

npm start - --reset-cache

Вероятно, порт уже используется. Я сталкиваюсь с аналогичной проблемой, когда сначала запускаю run-android, а затем запускаю npm. Я решаю это так: сначала получите идентификатор процесса, запущенного на порту 8081: sudo lsof -i: 8081

Йоханн Аттикот
источник
0

Я получил эту ошибку в Expo, потому что я экспортировал неправильное имя компонента, например

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

export default Stack;
duhaime
источник
0

Я решил эту проблему, выполнив следующие действия:

  1. cd android
  2. ./gradlew clean
  3. taskkill / f / im node.exe
  4. удалить приложение с Android
Хамид Шоджа
источник
0

Если вы используете окна машины вам нужно сделать , а cd androidзатем ./gradlew cleanзапуститеreact-native run-android

Forhad
источник