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

Expo应用本地开发正常,执行eas update时出现non-std C++异常

问题分析与解决方案

核心问题定位

"non-std C++ exception"错误仅在EAS更新后出现,但本地开发/Expo Go环境正常,本质是生产打包流程的依赖兼容性问题:本地Metro开发环境会自动处理宽松的依赖校验与polyfill,而EAS生产打包采用更严格的Native编译逻辑,依赖中的冲突模块、废弃Native库、版本不匹配的包都会触发这类底层异常。

针对性修复步骤

1. 清理冲突与废弃依赖

你的package.json存在明确的问题依赖:

  • 移除react-native-async-storage:该包已废弃,官方推荐使用@react-native-async-storage/async-storage,两者共存会导致Native层冲突。
  • 移除react-native-crypto、react-native-randombytes:替换为Expo官方的expo-crypto,它完全适配Expo打包流程,不会引发Native层异常。
  • 移除react-native-tcp、react-native-udp:这类底层网络模块在Expo生产环境兼容性极差,如需网络功能优先使用Expo提供的API或纯JS实现。

2. 移除Browserify系Node核心模块Polyfill

你引入的大量browserify类polyfill(如crypto、dns.js、stream-browserify等)在Metro开发环境可正常运行,但EAS打包时会与Expo内置环境冲突:

  • 移除所有相关依赖:assert、browserify-zlib、console-browserify、constants-browserify、crypto、dns.js、domain-browser、events、https-browserify、path-browserify、punycode、querystring-es3、readable-stream、stream-browserify、string_decoder、timers-browserify、tty-browserify、url、util、vm-browserify。
  • 若代码确实依赖Node API,通过Metro配置或Expo官方适配方案处理polyfill,而非直接安装browserify包。

3. 修正依赖版本不匹配

  • react-native-reanimated@3.1.0与Expo 48不兼容:Expo 48对应的react-native-reanimated版本为~2.14.4,3.x大版本升级会导致Native编译错误,执行降级命令:
    npm install react-native-reanimated@~2.14.4
    
  • 确认react-native-maps配置:当前版本1.3.2符合Expo 48要求,但需在app.json中配置插件:
    {
      "expo": {
        "plugins": [
          [
            "react-native-maps",
            {
              "iosMapsApiKey": "你的iOS地图密钥",
              "androidMapsApiKey": "你的Android地图密钥"
            }
          ]
        ]
      }
    }
    

4. 排查特殊体积依赖

@geo-maps/earth-coastlines-1km包含大量地理数据,可能触发打包时的内存或编译异常:

  • 临时移除该依赖,重新执行EAS更新,若错误消失,可考虑使用轻量化版本,或改为应用启动后动态加载数据。

5. 重置打包环境

彻底清理缓存避免旧编译产物干扰:

# 清除npm缓存
npm cache clean --force
# 清除Expo缓存
npx expo start --clear
# 清除EAS本地构建缓存
eas build:clear-cache

6. 检查EAS生产配置

确保eas.json生产环境配置无特殊编译选项冲突,示例配置:

{
  "build": {
    "production": {
      "ios": {
        "buildConfiguration": "Release"
      },
      "android": {
        "buildType": "Release"
      },
      "env": {
        "EXPO_PUBLIC_ENV": "production"
      }
    }
  }
}

验证流程

完成修改后,先通过expo start --no-dev --minify模拟生产打包环境测试,确认无异常后再执行eas update发布更新。


内容的提问来源于stack exchange,提问作者sam faulkner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:43:26