Expo新建项目启动Debugger-ui时出现EISDIR错误的解决求助
针对你遇到的这个EISDIR: illegal operation on a directory, read错误,我整理了几个经过验证的修复思路,你可以逐一尝试:
排查目录命名冲突
Metro在解析模块时,如果遇到和目标模块同名的目录,会尝试读取这个目录导致报错。比如你的项目里如果存在react、expo这类和依赖包同名的目录,或者某个目录名和你import的JS文件同名(比如有个utils目录,但你又import了./utils.js),就会触发这个问题。建议检查项目根目录和src目录下的所有文件夹名称,删除或重命名这类冲突的目录。清除Metro缓存
Metro的缓存可能存储了错误的路径映射,执行以下命令重启项目并清除缓存:npx expo start --clear # 或者简写 expo r -c重启后再尝试打开Remote JS调试。
检查Metro配置文件
如果你自定义了metro.config.js,请确认resolver配置中的extraNodeModules、watchFolders等选项是否指向了错误的目录。比如如果不小心把某个目录设置成了模块路径,Metro会尝试读取目录而非文件。如果没有修改过配置,可以暂时移除自定义的metro.config.js,用默认配置测试。切换Node.js版本
部分Node.js版本和当前Expo/Metro版本存在兼容性问题,建议切换到LTS版本(比如v18.x或v20.x)。可以用nvm(Node Version Manager)来快速切换:# 安装nvm后,切换到LTS版本 nvm install --lts nvm use --lts切换后删除
node_modules和锁文件,重新安装依赖再启动项目。重新安装项目依赖
依赖包损坏也可能导致文件读取异常,执行以下步骤:- 删除
node_modules目录 - 删除
package-lock.json(npm)或yarn.lock(yarn) - 重新安装依赖:
npm install或yarn install - 清除Metro缓存并启动项目
- 删除
重置调试器连接
有时候debugger-ui的缓存会导致异常,你可以:- 打开浏览器无痕模式,重新加载debugger-ui页面
- 断开Expo Go和Metro的连接,重新扫码或连接
- 尝试用
expo start --tunnel启动项目,通过隧道连接调试,避免网络问题
内容的提问来源于stack exchange,提问作者user3887366

