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

升级Expo SDK 48至49后打包出现两类报错,求解决方案

Expo SDK 48升级至49后打包报错的解决方案

问题场景

Expo SDK从48版本升级到49版本后,本地expo start运行正常,但打包(包括eas build或expo build)后出现两类错误:

  1. TypeError: Cannot read property 'prototype' of undefined, js engine: hermes
  2. Invariant Violation: "main" has not been registered. js engine: hermes

针对第一类错误的解决步骤

这类错误通常由依赖兼容性或编译配置问题引发,可按以下步骤排查:

  • 更新兼容依赖:执行npx expo install --fix,该命令会自动将项目依赖更新为Expo SDK 49推荐的兼容版本,解决多数依赖适配问题。
  • 检查babel配置:确保babel.config.js使用Expo官方预设,避免自定义插件干扰Hermes编译。示例配置:
module.exports = function(api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
  };
};
  • 清理缓存后重试:运行npx expo start --clear清除本地缓存,然后重新执行打包命令。如果使用EAS Build,建议在构建前删除node_modules、yarn.lock/package-lock.json,重新安装依赖后再触发构建。
  • 排查问题依赖:若上述步骤无效,检查项目中直接操作原型链、或依赖旧版React Native API的第三方库(如某些UI组件、工具库),查看其官方文档确认是否支持Expo SDK 49,必要时替换为兼容的替代库。

针对第二类错误的解决步骤

该错误本质是主组件未完成注册,通常由入口文件问题或模块加载失败导致,可按以下操作处理:

  • 确认入口文件的组件注册:检查项目入口文件(默认是App.js或index.js)是否包含正确的注册代码:
import { AppRegistry } from 'react-native';
import App from './App';
import { name as appName } from './app.json';

AppRegistry.registerComponent(appName, () => App);

确保appName与app.json中的name字段一致,且注册代码未被错误逻辑阻断执行。

  • 模拟生产环境调试:执行expo start --no-dev --minify启动生产模式的本地调试,复现打包后的运行环境,定位是否有模块加载失败导致注册代码未执行。
  • 检查EAS构建配置:若使用EAS Build,确认eas.json中的构建配置正确,没有遗漏必要的环境变量或打包参数,避免构建过程中出现文件缺失或配置错误。
  • 确认Hermes配置:SDK 49默认启用Hermes引擎,检查app.json/app.config.js中的配置是否正确:
{
  "expo": {
    "jsEngine": "hermes"
  }
}

避免手动修改配置导致的引擎兼容问题。


内容的提问来源于stack exchange,提问作者Muhammad Junaid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:22