React-Native:模块AppRegistry不是注册的可调用模块

时间:2016-01-23 22:44:02

标签: android react-native webpack

我正在尝试让ES6 react-native-webpack-server运行 在Android模拟器上。不同之处在于我已将package.jsonbuild.grade升级为使用react 0.18.0,并在启动时收到此错误。据我所知,AppRegistry被正确导入。即使我要注释掉代码,这个错误仍然会出现。这在iOS上没有问题。

我做错了什么?

编辑:在尝试了其他支持0.18.0的样板后,我仍然遇到同样的问题。

enter image description here

25 个答案:

答案 0 :(得分:35)

我刚刚升级到react-native 0.18.1今天很难在0.19.0-rc预发布版本中遇到一些对等依赖项问题。

回到你的问题,我做的是

  1. cd android
  2. sudo ./gradlew clean
  3. 然后回到工作目录并运行 react-native run-android

    升级后你也应该重启你的npm。

    希望这适合你。

答案 1 :(得分:14)

我在iOS上遇到了同样的问题,原因是我的 index.ios.js 不正确(因为我复制粘贴其中一个示例而不查看其内容),它以模块导出声明结束

PK

而不是预期的

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

我猜想你可以在index.android.js的android上遇到同样的问题。

答案 2 :(得分:8)

此问题的一个主要原因可能是您要安装插件而忘记链接的地方

尝试一下:

react-native link

重新运行您的应用。

希望这会有所帮助。请在评论中告诉我。谢谢。

答案 3 :(得分:7)

我只需添加

就解决了这个问题
import { AppRegistry } from "react-native";
import App from "./App";
import { name as appName } from "./app.json";  
AppRegistry.registerComponent(appName, () => App);

到我的 index.js

确保您的 index.js

中存在

答案 4 :(得分:3)

希望这可以让人头疼。升级我的react-native版本后出现此错误。令人困惑的是它只出现在机器人方面。

我的文件结构包含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中,将entryFileindex.js更改为index.android.js

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

答案 5 :(得分:2)

我不知道为什么,但是当我从index.android.js中包含的index.js文件中移动AppRegistry.registerComponent直接驻留在index.android.js中时,它似乎有效。

答案 6 :(得分:2)

对我来说,我的问题是捆绑时错误的条目文件

我使用App.js作为我的入门文件,因此App无法找到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/

答案 7 :(得分:1)

如果您使用的是某些示例,则可能无效

这是我的滚动视图版本

.Skip(1)

答案 8 :(得分:1)

我在Genymotion上卸载了它。然后运行DatabaseHelper db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //add this line in your code.. db = new DatabaseHelper(this); et1= (EditText) findViewById(R.id.eTemail); et2 = (EditText) findViewById(R.id.eTpassword); r1 = (RelativeLayout) findViewById(R.id.colorChange); } 来构建应用程序。它奏效了。在运行react-native run-android之前先试试这个,它会为你节省很多时间。

答案 9 :(得分:1)

仅用于重新启动计算机即可对其进行修复。 (我的错误是“模块appRegistry不是注册的可调用模块(调用runapplication)js引擎:hermes”)

这里可能已经有用的另一个最重要的答案就是杀死节点进程:

killall -9 node

[Module AppRegistry is not registered callable module (calling runApplication)]

答案 10 :(得分:1)

在摆弄node_modules目录中的依赖项代码之后,我遇到了这个问题-在iOS和Android上,在Mac上进行开发。

我用以下方法解决了它:

rm -rf node_modules
npm i
npx pod-install ios

基本上,这只是重新安装依赖项。

答案 11 :(得分:0)

我通过以下操作解决了这个问题:

  1. cd android
  2. ./ gradlew clean
  3. taskkill / f / im node.exe
  4. 从android卸载应用

答案 12 :(得分:0)

通过执行这些命令(操作系统:Windows 10)解决了我的问题。

  1. cd android
  2. gradlew clean
  3. cd..
  4. npx react-native run-android

答案 13 :(得分:0)

如果您使用的是Windows计算机,则需要先进行cd android然后./gradlew clean然后运行react-native run-android

答案 14 :(得分:0)

我多次遇到同样的问题。以下解决方案解决了我的问题。我已经根据复杂程度列出了它们。

  1. 重启电脑看看问题是否解决

  2. 如果它仍然存在,尝试杀死运行端口通常为8080的进程

    netstat -ano | findstr 8080

     taskkill /F /PID <PID>
    
  3. 如果它仍然存在,请转到“android”目录,然后继续

    光盘安卓

    ./gradlew 干净

和起始节点

npm start

然后运行 ​​npx react-native run androidexpo stat 并按“a”

希望您能解决上述问题。

答案 15 :(得分:0)

这可能是因为来自 node、pod、gradle 任何地方的任何缓存问题,最好进行完整的清理,为此使用 react native clean project

答案 16 :(得分:0)

检查您是否没有直接在 SafeAreaView 中渲染某些内容

确保您遵循此格式

<SafeAreaView>
    <View>
       {children}
    </View>
</SafeAreaView>

答案 17 :(得分:0)

我在Expo中遇到此错误,因为我导出了错误的组件名称,例如

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

export default Stack;

答案 18 :(得分:0)

npm start---reset-cache

端口可能已在使用中。当我第一次运行react-native run-android然后npm start时,我遇到类似的问题。我这样解决:首先,获取在端口8081中运行的进程的ID: 须藤lsof -i:8081

答案 19 :(得分:0)

如果您在使用android的Windows中遇到此错误

打开您的根目录app文件夹,然后移至android文件夹。

     cd android 
     gradlew clean

再次启动您的应用 react-native运行Android

好用的

答案 20 :(得分:0)

重新启动打包程序对我有用。 只需杀死React Native打包程序并再次运行即可。

答案 21 :(得分:0)

对我而言,我以这种方式与react native链接:react-native链接

答案 22 :(得分:0)

对我来说,这是一个问题,反应本机依赖于下一版本的反应包,而在我的package.json中指定了旧版本。升级我的反应版本解决了这个问题。

答案 23 :(得分:0)

通过增加我的inotify max_user_watches修复了我的问题:

sudo sysctl fs.inotify.max_user_watches=1280000

答案 24 :(得分:0)

在我的情况下,我的index.js只是错误地指向了另一个js而不是我的Launcher js,它不包含AppRegistry.registerComponent()

因此,请确保文件index.js指向该类。