expo start --web启动失败 报Body must be a string错误
报错原因
核心触发原因是依赖版本不兼容:
你使用的Expo SDK 45版本对配套依赖有严格的版本要求,必须搭配React 17生态使用,但你当前项目中安装的react-dom@^18.2.0、react-native-web@^0.18.1都是React 18对应的版本,和项目中锁定的react@17.0.2版本冲突。
web开发服务器启动时,内部会调用graphql相关依赖做schema introspection,版本冲突导致传入graphql解析方法的参数为undefined,直接抛出Body must be a string. Received: undefined错误。而expo build:web走的是生产构建链路,对版本冲突的容错逻辑不同,因此可以正常导出生产包。
修复步骤
- 调整
package.json中的依赖版本到SDK 45兼容范围:- 将
react-dom的版本改为17.0.2 - 将
react-native-web的版本改为0.17.7 - (可选)删除devDependencies中本地安装的
expo-cli、eas-cli,这类CLI工具推荐全局安装,本地安装极易引发版本冲突
- 将
- 清理旧依赖和缓存:
- 删除项目根目录下的
node_modules文件夹 - 删除对应包管理器的锁文件:npm用户删
package-lock.json,yarn用户删yarn.lock - 执行
npm cache clean --force清理npm缓存
- 删除项目根目录下的
- 重新安装依赖:在项目根目录执行
npm install - 启动服务:执行
expo start --web -c,-c参数会强制清空Expo启动缓存,避免旧缓存干扰。
补充说明:如果需要使用React 18生态,需要将Expo SDK升级到46及以上版本,SDK 45不支持React 18。
内容的提问来源于stack exchange,提问作者John Goofy
相关产品推荐
相关产品推荐

