You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React Native旧项目Android构建成功后启动报EventEmitter未定义错误,需排查依赖更新项

React Native旧项目Android构建成功后启动报EventEmitter未定义错误,需排查依赖更新项

嘿,我看了你的问题和package.json内容,这个EventEmitter错误大概率是依赖版本与RN 0.81.5严重不兼容导致的,尤其是底层事件系统、React版本和老旧废弃库的冲突。我帮你梳理了具体要调整的依赖和步骤,一步步来:

一、先修复最致命的React版本不匹配问题

RN 0.81.5官方只适配React 18.2.0,你现在用的React 19.1.0是还没被RN正式支持的预览版,底层事件系统完全不兼容,这绝对是核心问题之一:

  • 打开package.json,把reactreact-dom的版本改成:
    "react": "18.2.0",
    "react-dom": "18.2.0"
    

二、替换/升级废弃/过时的库

这些库要么停止维护,要么用了旧的EventEmitter通信方式,和新版本RN完全不搭:

  • react-native-touch-id:这个库早就废弃了,现在都用生物识别的新标准库替代,直接移除它,换成react-native-biometrics
    yarn remove react-native-touch-id
    yarn add react-native-biometrics
    
  • react-native-easy-grid:已经停止维护3年多了,RN现在原生Flexbox布局完全能满足需求,直接移除它,把代码里的Grid组件换成原生的View+Flex布局就行。
  • react-native-restart:0.0.27版本太老,升级到最新稳定版(当前是0.0.29),它修复了和RN 0.80+的原生通信兼容问题:
    yarn add react-native-restart@latest
    

三、统一升级@react-native-aria系列库

你用的@react-native-aria版本参差不齐,很多是0.2.x甚至0.0.5的旧版,这些旧版完全没适配RN 0.81的事件系统(尤其是Focus/EventEmitter相关的逻辑),统一升级到0.3.x的稳定版:

yarn add @react-native-aria/button@^0.3.0 @react-native-aria/checkbox@^0.3.0 @react-native-aria/dialog@^0.3.0 @react-native-aria/focus@^0.3.0 @react-native-aria/interactions@^0.3.0 @react-native-aria/menu@^0.3.0 @react-native-aria/overlays@^0.3.0 @react-native-aria/radio@^0.3.0 @react-native-aria/slider@^0.3.0 @react-native-aria/switch@^0.3.0 @react-native-aria/toggle@^0.3.0 @react-native-aria/utils@^0.3.0

(如果安装时出现版本冲突,就去npm查每个包的最新兼容RN 0.81的版本,确保统一大版本)

四、升级Gluestack UI和导航库

  • Gluestack UI:你用的@gluestack-ui/themed-native-base 0.1.108是非常旧的测试版,现在已经升级到v1.x稳定版,旧版依赖的底层@react-native-aria版本完全不匹配,建议替换成最新的核心包:
    yarn remove @gluestack-ui/themed-native-base
    yarn add @gluestack-ui/core @gluestack-ui/themed
    
    (注意要调整代码里的导入路径,比如从@gluestack-ui/themed-native-base/Button改成@gluestack-ui/themed/Button
  • React Navigation:你用的6.3.x/6.5.x版本太旧,升级到6.10+的稳定版,同时把配套的react-native-safe-area-contextreact-native-screens升级到适配RN 0.81的版本:
    yarn add @react-navigation/bottom-tabs@^6.10.0 @react-navigation/material-bottom-tabs@^6.10.0 @react-navigation/native@^6.10.0 @react-navigation/stack@^6.10.0
    yarn add react-native-safe-area-context@^5.11.0 react-native-screens@^30.0.0
    

五、其他小细节调整

  • redux-axios-middleware:4.0.1版本和你用的Redux 5.0.0不兼容,升级到5.0.0稳定版:
    yarn add redux-axios-middleware@^5.0.0
    
  • 清理缓存重新构建:所有依赖调整完后,一定要清理缓存避免旧代码残留:
    rm -rf node_modules yarn.lock
    yarn install
    # Android项目执行以下命令
    ./gradlew clean
    npx react-native run-android
    

排查小技巧

如果升级后还是有EventEmitter错误,打开终端跑npx react-native log-android,看原生端的详细错误日志,能直接定位到是哪个模块抛出的错误,然后针对性地排查那个模块的版本或者原生代码。另外可以先注释掉非核心的模块(比如react-native-restart),逐个测试,快速定位问题源。

这样调整完,应该就能解决EventEmitter的错误了,核心就是把所有和RN事件系统、原生通信相关的依赖都升级到适配RN 0.81的版本,同时移除废弃库。

火山引擎 最新活动