React-Native:モジュールAppRegistryは登録済みの呼び出し可能なモジュールではありません


114

現在、ES6のreact-native-webpack-serverをAndroidエミュレーターで実行しようとしています。違いは、私は私をアップグレードしたあるpackage.jsonbuild.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

プレリリースバージョン0.18.1でピア依存関係の問題が発生しにくい今日のネイティブ対応にアップグレードしました0.19.0-rc

あなたの質問に戻って、私がしたことは

  1. cd android
  2. sudo ./gradlew cleanここでクリーンがどのように機能するかについての詳細情報)

次に、作業ディレクトリに戻って実行します react-native run-android

そのアップグレード後、npmも再起動する必要があります。

これがうまくいくことを願っています。


3
gradlewコマンドを実行しようとしていますANDROID_HOMEが、パスに含まれていてもAndroid SDKが見つからないというメッセージが表示され続けます。また、でlocal.propertiesファイルを追加しましたsdk.dir=。何か案は?
steezeburger 2016

42
のようなことをするためのアドバイスをするときsudo ./gradlew clean、それはどうやらgradleディストリビューション全体をどうやら再ダウンロードして再インストールする巨大な操作であることを述べておくといいでしょう。
SzczepanHołyszewski2016年

1
エラーの取得モジュールHMRClientは、登録された呼び出し可能モジュール(call enable)ではありません。私がjsファイルで行った変更を見ることができません:(
Dinesh R Rajput

あなたのAndroid SDKの場所を見つけるには、オープンのAndroid Studioとヒットconfigureが、おそらくのようなものである上部にパスが表示されます:/Users/karim/Library/Android/sdk
カリムMortabit

私がRN 0.44に更新してみた後、これは何もしませんでした
SleepsOnNewspapers

15

私はiOSでも同じ問題を抱えていましたが、原因はindex.ios.jsが間違っていたためです(例の1つを内容を見ずにコピーして貼り付けたため)、モジュールのエクスポート宣言で終わりました。

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

期待される代わりに

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

あなたは私が推測するindex.android.jsを使用してAndroidで同じ問題を抱えている可能性があります。


13

この問題の主な理由の1つは、プラグインをインストールし、それをリンクするのを忘れた場所にある可能性があります

これを試して:

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.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.jsに変更しますindex.android.js

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

3

私にとっては、コンピュータを再起動するだけで修正されました。(私のエラーは「モジュールappRegistryは登録された呼び出し可能モジュールではありません(runapplicationを呼び出す)jsエンジン:hermesでした」)

ここに欠けており、うまくいったかもしれない別のトップアンサーは、単にノードプロセスを殺すことでした:

killall -9 node

[ モジュールAppRegistryは登録されていない呼び出し可能モジュールです(runApplicationを呼び出しています) ]


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

あなたがアンドロイドのWindowsでこのエラーに直面している場合

ルートディレクトリのappフォルダーを開き、androidフォルダーに移動します。

     cd android 
     gradlew clean

アプリを再起動します反応ネイティブrun-android

それはうまくいきます


0

私の場合、index.jsLauncher jsではなく、を含まない別のjsを指しているだけAppRegistry.registerComponent()です。

したがって、ファイルを確認してindex.js、クラスを登録してください。


0

私の問題は、inotify max_user_watchesを増やすことで修正されました。

sudo sysctl fs.inotify.max_user_watches=1280000

0

私にとっては、reactパッケージの次のバージョンへのreact-native依存関係の問題でしたが、私のpackage.jsonでは古いものが指定されていました。反応バージョンをアップグレードすると、この問題は解決しました。


0

私にとっては、このように反応ネイティブとリンクしました:反応ネイティブリンク


たぶんこれを少し拡張します。

0

npm start---reset-cache

おそらくポートはすでに使用されています。最初にreact-native run-androidを実行してからnpm startを実行すると、同様の問題が発生します。私はそれを次のように解決します。最初に、ポート8081で実行されているプロセスのIDを取得します。sudo lsof -i:8081


0

Expoで間違ったコンポーネント名をエクスポートしたため、このエラーが発生しました。

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

export default Stack;

0

私は次のようにしてこの問題を解決しました:

  1. cd android
  2. ./gradlew clean
  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.