升级Expo SDK 51后执行eas update报错及热重载失效求助
eas update报错的解决方案 问题描述
- 升级Expo SDK至51版本后,Windows系统执行
eas update时持续抛出错误:Error: Expected Metro server instance to have private functions exposed - 完整报错堆栈:
[expo-cli] at forkMetroBuildAsync (C:\PATH_TO_MY_APP\node_modules@expo\cli\src\export\fork-bundleAsync.ts:287:11)
[expo-cli] at buildAsync (C:\PATH_TO_MY_APP\node_modules@expo\cli\src\export\fork-bundleAsync.ts:207:31)
[expo-cli] at async Promise.all (index 0)
[expo-cli] at bundleProductionMetroClientAsync (C:\PATH_TO_MY_APP\node_modules@expo\cli\src\export\fork-bundleAsync.ts:224:12)
[expo-cli] at createBundlesAsync (C:\PATH_TO_MY_APP\node_modules@expo\cli\src\export\fork-bundleAsync.ts:86:19)
[expo-cli] at exportAppAsync (C:\PATH_TO_MY_APP\node_modules@expo\cli\src\export\exportApp.ts:92:19)
[expo-cli] at exportAsync (C:\PATH_TO_MY_APP\node_modules@expo\cli\src\export\exportAsync.ts:19:3)
- 附加异常:代码修改后应用无热重载功能,但
eas build可正常执行,开发控制台能看到构建结果
已尝试无效操作
- 执行
npx expo-doctor和npx expo install --check - 删除node_modules和package-lock.json后重新执行
npm i - 执行
eas logout再eas login - 安装最新版expo-cli
补充解决方法
- 锁定Metro适配版本:SDK 51要求Metro版本为
0.80.9,打开package.json,手动将metro和metro-resolver的版本指定为0.80.9,保存后执行npm install - 彻底清理Metro缓存:执行
npx expo start --clear清空缓存,再尝试运行eas update - 检查自定义Metro配置:如果项目存在
metro.config.js,移除所有修改Metro server私有方法的自定义配置,改用Expo官方默认配置 - 切换包管理器:Windows环境下可尝试切换至yarn或pnpm,删除现有依赖文件后重新安装:
rmdir /s node_modules del package-lock.json yarn install # 或 pnpm install - 更新EAS CLI:执行
npm install -g eas-cli安装最新版EAS CLI,确保其适配SDK 51 - 重置更新状态:在
eas.json的对应环境配置中添加"updates": { "enabled": false },执行一次eas build后再移除该配置,重新启用更新功能
内容的提问来源于stack exchange,提问作者kool Erick

