集成AWS Amplify的Expo项目iOS测试连开发服务失败及重复文件报错如何修复
报错原因
- 重复文件错误(DuplicateError)根因:执行
amplify pull后,Amplify会在本地生成两份云函数配置文件,分别存放在amplify/#current-cloud-backend和amplify/backend目录下。React Native原生端打包依赖的jest-haste-map会全量扫描项目文件,重名的配置文件会触发命名冲突,直接导致打包转换器初始化失败,开发服务无法正常启动。 - iOS连接错误是上述问题的衍生现象:Web端打包器的文件扫描规则与原生端不同,未触发重复文件校验因此可以正常运行;而iOS端请求bundle资源时,开发服务已经因为打包错误停止响应,因此抛出连接失败报错。
修复方案
- 配置Metro打包忽略规则
在项目根目录找到metro.config.js(不存在则新建),添加如下配置,让打包器跳过Amplify的云同步缓存目录:
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); // 忽略amplify的重复配置目录 config.resolver.blockList = [ /amplify\/#current-cloud-backend\/.*/, ]; module.exports = config;
清除缓存重启服务
执行如下命令清除所有打包缓存,避免旧的扫描规则残留:npx expo start --clear可选临时方案
如果不需要本地修改Amplify后端配置,也可以直接删除amplify/#current-cloud-backend目录解决问题,但后续重新执行amplify pull后会再次生成该目录,需要重复删除,更推荐使用Metro配置的方案永久解决。
内容的提问来源于stack exchange,提问作者patataskr
相关产品推荐
相关产品推荐

