You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Expo启动报错:TypeError及main未注册问题求助

React Native Expo 崩溃问题排查与修复(TypeError + Invariant Violation)

问题描述

运行Expo应用时触发崩溃,同时出现两个核心错误:

  • TypeError: undefined is not a function
  • Invariant Violation: "main" has not been registered

环境信息

  • Node: 16.15.0
  • Yarn: 1.22.15
  • Expo: 45.0.0
  • React: 17.0.2
  • React Native: 0.68.2

已尝试操作:清理缓存、卸载@react-native-community/datetimepicker和moment包,但问题未解决。


排查与修复步骤

1. 确认入口文件注册逻辑

Expo项目需使用专属的注册方法,检查index.js(或项目入口文件)是否符合以下规范:

import { registerRootComponent } from 'expo';
import App from './App';

registerRootComponent(App);

禁止使用React Native原生的AppRegistry.registerComponent('main', () => App),否则会触发"main未注册"异常。

2. 校验依赖版本兼容性

尽管核心依赖版本匹配Expo 45要求,但需排查第三方依赖冲突:

  • 执行yarn why react或yarn why react-native,查看是否有依赖强制引入了不兼容的React/React Native版本
  • 检查package.json中剩余第三方库(如导航、状态管理库)的版本是否与Expo 45兼容,可参考Expo官方文档的依赖版本对照表

3. 彻底清理缓存并重建项目

执行完整的缓存清理与重建流程,避免残留缓存影响:

  • 清除Expo缓存:expo r -c
  • 清除Yarn缓存:yarn cache clean
  • 删除依赖文件:rm -rf node_modules yarn.lock(Windows系统替换为rd /s /q node_modules && del yarn.lock)
  • 重新安装依赖:yarn install
  • 重启Expo开发服务器与模拟器/真机

4. 排查代码中的语法与导入错误

TypeError: undefined is not a function通常源于以下场景:

  • 导入方式错误(如将默认导出当作命名导入)
  • 调用了未定义的变量作为函数
  • 卸载datetimepicker和moment后,未删除组件中残留的相关调用代码(如moment()、DateTimePicker组件引用)

5. 检查Babel配置正确性

确保babel.config.js使用Expo默认配置,避免自定义配置导致兼容性问题:

module.exports = function(api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
  };
};

若有自定义插件,暂时移除后测试应用是否能正常启动。

6. 测试基础项目可用性

创建一个全新的Expo 45空白项目,验证基础环境是否正常:

expo init test-project --template blank@45
cd test-project
yarn install
expo start

若新项目能正常运行,说明原项目的代码或配置存在问题,可逐步迁移代码到新项目中,定位触发崩溃的具体文件。

内容的提问来源于stack exchange,提问作者Leul Ayalew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:12:23