如何在模拟器上连接自托管OTA服务器运行expo-updates包?
解决Expo Dev Client中启用自托管OTA更新的问题
核心结论
可以通过环境变量强制将DEV设为false,绕开dev client的开发模式OTA限制,但会改变dev client的运行行为。
具体实现方法
方法一:通过环境变量启动Dev Client(推荐)
启动模拟器上的dev client时,添加EXPO_NO_DEV=1环境变量,让expo-updates以生产模式逻辑运行:
- iOS:
EXPO_NO_DEV=1 npx expo run:ios - Android:
EXPO_NO_DEV=1 npx expo run:android
这个变量会直接覆盖expo-updates内部的DEV判断,允许客户端触发OTA更新检查。
方法二:手动修改expo-updates源码(不推荐)
找到项目依赖中的node_modules/expo-updates/src/Updates.ts,将DEV常量直接设为false:
const DEV = false;
⚠️ 注意:这种方式会在每次执行npm install或yarn install后被覆盖,仅适合临时测试。
关键注意事项
- 启用该模式后,dev client会切换为生产模式行为:不会自动热重载代码,需要手动调用
Updates.checkForUpdateAsync()等方法触发更新 - React DevTools等调试工具可能无法正常工作,生产模式会禁用部分调试特性
- 确保自托管OTA服务器的
/manifest端点配置正确,客户端能正常访问(注意模拟器的网络权限,本地服务器需保证模拟器可访问) - 测试前需先打包并上传一个更新包到自托管服务器,否则客户端无更新可拉取
内容的提问来源于stack exchange,提问作者Lee Hodges
相关产品推荐
相关产品推荐

