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

expo prebuild和expo eject有什么区别?

核心结论

prebuild 和 eject 不是同一种操作,二者定位、可逆性、工作流适配逻辑完全不同,集成Notifee要求执行的prebuild是目前Expo官方推荐的原生代码生成方案,和早年的eject有本质区别。

二者核心差异

  • 设计定位不同
    eject是Expo早期版本提供的「彻底脱离Expo托管工作流」的操作,执行后会全量导出所有Expo封装的底层原生工程代码到项目目录,直接把项目转为纯React Native裸项目。操作完成后你将无法再使用Expo Go调试、无法直接使用Expo官方构建服务的默认托管能力,后续所有原生依赖配置、原生工程版本升级都需要手动维护。
    prebuild是Expo后续推出的原生代码预生成方案,本质是给托管工作流提供「按需生成原生工程目录」的能力,设计目标是帮助需要接入自定义原生代码(比如带原生实现的Notifee这类通知库)的用户,不用彻底脱离Expo生态就能接入原生能力。
  • 可逆性不同
    eject是不可逆操作,一旦导出原生代码,就无法再切回纯托管的Expo工作流,所有原生层改动、版本升级都要手动处理,维护成本极高。
    prebuild生成的ios、android原生目录可以随时删除,你完全可以在完成原生依赖调试配置后删掉原生目录,切回纯托管模式走云端构建,原生配置只需要统一维护在app.json/app.config.js中即可,不会被锁死在裸工作流。
  • 配置维护逻辑不同
    执行eject后,所有原生工程配置(包括权限声明、第三方SDK初始化、构建参数等)都需要手动修改原生目录下的配置文件,升级React Native、升级Expo SDK版本时需要手动合并原生配置变更,极易出现冲突。
    prebuild是基于配置文件自动生成原生代码的,所有原生相关配置都统一写在Expo配置文件里,执行npx expo prebuild时会按照配置自动生成对应原生目录,升级SDK时只需要更新对应配置项即可,不需要手动合并原生文件改动;配合Config Plugin还可以自动完成第三方原生库的配置,不需要手动编写原生代码。
  • 对现有工作流的影响不同
    执行eject后,你必须在本地配置完整的iOS/Android原生开发环境,所有构建都要在本地完成或者自行搭建CI流程,无法再使用Expo提供的开箱即用能力。
    prebuild支持两种使用模式:你既可以在本地执行prebuild生成原生目录做本地调试,也可以完全不在本地存储原生目录,直接让云端构建服务在构建阶段自动执行prebuild生成原生工程、自动集成带原生实现的依赖,全程不需要接触原生代码,也不影响你使用Expo的其他云服务能力。

针对你集成Notifee的场景,直接使用prebuild即可,不需要走早年的eject流程:如果做本地开发,执行npx expo prebuild生成原生目录后再安装依赖启动调试即可;如果走云端构建,甚至不需要在本地执行prebuild,只要给Notifee配置好对应的Config Plugin,云端构建时会自动完成prebuild和依赖集成,不会破坏你现有的Expo工作流。

内容的提问来源于stack exchange,提问作者Alexander Obidiegwu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:12:19