React Native使用Hermes引擎时'main未注册'错误求助
React Native + Hermes 持续出现“main has not been registered”错误排查求助
开发阶段使用Hermes引擎时,反复遇到以下错误,导致开发停滞:
ERROR Invariant Violation: "main" has not been registered. This can happen if:
- Metro(本地开发服务器)在错误的文件夹中运行。检查Metro是否在运行,停止并在当前项目中重启。
- 某个模块因加载错误导致未调用
AppRegistry.registerComponent,js engine: hermes
已尝试清除Metro缓存、重建缓存、重启项目等常规操作,问题仍未解决。
项目配置文件
package.json
{ "main": "node_modules/expo/AppEntry.js", "scripts": { "start": "expo start --port 54842", "android": "expo run:android", "ios": "expo run:ios", "web": "expo start --web" }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.5.2", "@fortawesome/free-regular-svg-icons": "^6.5.2", "@fortawesome/free-solid-svg-icons": "^6.5.2", "@fortawesome/react-native-fontawesome": "^0.3.2", "@react-native-community/slider": "^4.5.2", "@react-navigation/bottom-tabs": "^6.5.20", "@react-navigation/material-top-tabs": "^6.6.5", "@react-navigation/native": "^6.1.9", "@react-navigation/stack": "^6.3.20", "axios": "^1.6.2", "expo": "^51.0.8", "expo-av": "^14.0.5", "expo-file-system": "^17.0.1", "expo-media-library": "^16.0.3", "expo-splash-screen": "^0.27.4", "expo-status-bar": "^1.12.1", "iconv-lite": "^0.6.3", "js-base64": "^3.7.7", "moment": "^2.30.1", "react": "18.2.0", "react-dom": "18.2.0", "react-native": "0.74.1", "react-native-dropdown-picker": "^5.4.6", "react-native-fast-image": "^8.6.3", "react-native-gesture-handler": "~2.16.1", "react-native-modal-dropdown": "^1.0.2", "react-native-pager-view": "6.3.0", "react-native-picker-select": "^9.1.3", "react-native-safe-area-context": "4.10.1", "react-native-screens": "3.31.1", "react-native-select-dropdown": "^4.0.1", "react-native-slider": "^0.11.0", "react-native-svg": "15.2.0", "react-native-tab-view": "^3.5.2", "react-redux": "^9.0.2", "redux": "^5.0.0", "string-similarity-js": "^2.1.4", "text-encoding": "^0.7.0" }, "devDependencies": { "@babel/core": "^7.20.0" }, "private": true, "name": "vokok-app", "version": "1.0.0" }
app.json
{ "expo": { "name": "vokok-app", "slug": "vokok", "version": "1.0.0", "orientation": "portrait", "icon": "./assets/icon.png", "userInterfaceStyle": "light", "plugins": [ [ "expo-av", { "microphonePermission": "Allow ${PRODUCT_NAME} to access your microphone" } ] ], "splash": { "image": "./assets/sta_header_logo_rec.png", "resizeMode": "contain", "backgroundColor": "#ffffff" }, "assetBundlePatterns": [ "**/*" ], "ios": { "supportsTablet": true, "bundleIdentifier": "com.stormstudy.vokok", "buildNumber": "1.0.0", "permissions": [ "INTERNET", "ACCESS_NETWORK_STATE" ] }, "android": { "package": "com.stormstudy.vokok", "versionCode": 1, "adaptiveIcon": { "foregroundImage": "./assets/icon_android.png", "backgroundColor": "#ffffff" }, "permissions": [ "INTERNET", "ACCESS_NETWORK_STATE", "android.permission.RECORD_AUDIO", "android.permission.MODIFY_AUDIO_SETTINGS" ] }, "web": { "favicon": "./assets/favicon.png" }, "packagerOpts": { "port": 57577 }, "extra": { "eas": { "projectId": "fedf46ea-d30c-4f1b-8fb9-4b285ff246dd" } } } }
AppEntry.js
import { registerRootComponent } from 'expo'; import { AppRegistry, Platform } from 'react-native'; import App from '../../App'; registerRootComponent(App); AppRegistry.registerComponent('main', () => App);
已尝试的排查操作
- 调整AppEntry.js,先后测试过单独使用
registerRootComponent、同时使用registerRootComponent和AppRegistry.registerComponent,均未解决错误。 - 删除
node_modules和package-lock.json后重新安装依赖,问题依旧存在。
请求针对React Native + Hermes场景提供该错误的解决思路和具体方案,感谢各位的建议。
内容的提问来源于stack exchange,提问作者Genie
相关产品推荐
相关产品推荐

