Expo手机端运行安卓App时出现ENOENT文件不存在错误咨询
Expo运行至手机端ENOENT报错(非控制台打印响应类)诱因排查
报错核心特征为Metro尝试读取的路径错误拼接了HTTP服务地址,将网络bundle路径识别为本地文件路径,具体报错信息如下:
Error: ENOENT: no such file or directory, open '/home/ira/dev/eshka/http:/192.168.0.104:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&strict=false&minify=false' at Object.openSync (node:fs:585:3) at Object.readFileSync (node:fs:453:35) at getCodeFrame (/home/ira/dev/eshka/node_modules/metro/src/Server.js:949:18) at Server._symbolicate (/home/ira/dev/eshka/node_modules/metro/src/Server.js:1022:22) at runMicrotasks (<anonymous>) at processTicksAndRejections (node:internal/process/task_queues:96:5) at Server._processRequest (/home/ira/dev/eshka/node_modules/metro/src/Server.js:429:7) { errno: -2, syscall: 'open', code: 'ENOENT', path: '/home/ira/dev/eshka/http:/192.168.0.104:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&strict=false&minify=false' }
排除代码中控制台打印原始响应的场景后,可按以下优先级排查诱因:
- Metro缓存损坏
这是该类路径拼接错误最高发的诱因,旧缓存中留存的错误路径映射会导致Metro处理符号化请求时逻辑错乱。直接执行带清缓存参数的启动命令即可:npx expo start -c
等待Metro全量重新构建缓存后,再重新连接手机测试。 - 主机地址识别异常
当设备存在多网卡(同时连接VPN、虚拟机虚拟网卡、有线+无线双网络)时,Metro自动识别的局域网IP可能和手机实际访问的服务IP不匹配,导致请求路径解析错位。
排查时先关闭电脑、手机端所有VPN、代理软件,确认两台设备在同一WiFi网段下可互相ping通;启动Expo时手动指定绑定的同网段IP即可,命令参考:EXPO_DEV_SERVER_HOST=你的电脑局域网IP npx expo start - Metro配置或版本不兼容
如果近期升级过Expo SDK、单独调整过metro依赖版本,或者自定义过metro.config.js中的解析规则,可能触发Metro路径解析的已知bug。
先将metro.config.js临时恢复为Expo默认配置测试,再核对所有metro相关依赖版本和当前使用的Expo SDK版本要求完全匹配,不要单独升级metro到跨版本的非兼容版本。 - 动态模块引用错误
排查代码中所有动态require()、动态import()的传参,确认没有误将HTTP网络地址作为本地模块路径传入,也没有在拼接本地资源路径时混入HTTP前缀,这类非法路径会被Metro直接拼接到项目根目录下触发读文件错误。
内容的提问来源于stack exchange,提问作者xdchan
相关产品推荐
相关产品推荐

