为何Expo裸工作流项目可直接在Expo Go中运行?
核心原理与认知补全
1. 带Android/iOS文件夹却能跑在Expo Go里的原因
这个项目的Android/iOS文件夹是通过expo prebuild生成的预构建原生模板,而非经过自定义修改的原生代码。关键逻辑在于:
- 它依赖的所有库(比如
expo-camera、@tensorflow/tfjs-react-native)均属于Expo官方预集成的范围,这些库的原生实现已经打包在Expo Go客户端中。 - 预构建的原生文件夹只是Expo原生层的镜像副本,没有添加任何Expo Go不兼容的自定义原生逻辑,因此Expo Go可以直接识别并加载项目的JS代码。
2. 常规裸工作流需要构建dev-client的本质原因
当项目满足以下任一条件时,才必须构建自定义dev-client:
- 引入了Expo Go未预集成的第三方原生库(比如小众原生SDK)
- 手动修改了Android/iOS文件夹内的原生代码(比如自定义Native Module、修改Manifest/Info.plist的特殊配置)
- 使用了Expo config plugins无法自动处理的原生需求
这些场景下,Expo Go没有对应的原生实现,必须通过eas build将自定义原生代码打包到dev-client中,才能让JS层调用到对应的原生逻辑。
3. 你之前的认知遗漏点
- 「有Android/iOS文件夹=裸工作流」是错误认知:
expo prebuild是Expo的预构建功能,目的是为后续可能的原生修改铺路,但只要未做自定义原生改动,项目依然属于兼容托管工作流的状态,可以直接用Expo Go运行。 - 裸工作流的核心是「自定义原生代码/依赖」,而非是否存在原生文件夹。Expo的工作流是渐变式的,并非非托管即裸的二元对立。
内容的提问来源于stack exchange,提问作者coloraday
相关产品推荐
相关产品推荐

