Expo Android项目运行报EISDIR: illegal operation on a directory, read错误如何解决
完整错误栈信息:
Error: EISDIR: illegal operation on a directory, read at Object.readSync (fs.js:592:3) at tryReadSync (fs.js:366:20) at Object.readFileSync (fs.js:403:19) at UnableToResolveError.buildCodeFrameMessage (C:\Users\thanu\Downloads\sociallydarkmodeandfollowshare\socially2\node_modules\metro\src\node-haste\DependencyGraph\ModuleResolution.js:304:17) at new UnableToResolveError (C:\Users\thanu\Downloads\sociallydarkmodeandfollowshare\socially2\node_modules\metro\src\node-haste\DependencyGraph\ModuleResolution.js:290:35) at ModuleResolver.resolveDependency (C:\Users\thanu\Downloads\sociallydarkmodeandfollowshare\socially2\node_modules\metro\src\node-haste\DependencyGraph\ModuleResolution.js:168:15) at DependencyGraph.resolveDependency (C:\Users\thanu\Downloads\sociallydarkmodeandfollowshare\socially2\node_modules\metro\src\node-haste\DependencyGraph.js:353:43) at C:\Users\thanu\Downloads\sociallydarkmodeandfollowshare\socially2\node_modules\metro\src\lib\transformHelpers.js:271:42 at C:\Users\thanu\Downloads\sociallydarkmodeandfollowshare\socially2\node_modules\metro\src\Server.js:1097:37 at Generator.next ()
触发原因
该错误本质是Node.js的fs模块尝试将目录作为普通文件读取触发的系统级错误,结合栈中的Metro打包器日志,可定位是Expo的模块解析阶段出错,常见触发场景如下:
- 导入语句路径错误:
import/require语句传入的路径指向目录而非文件,且对应目录下没有默认入口文件(如index.js/index.ts),也没有在目录下的package.json中指定main字段作为入口 - 项目缓存损坏:Metro打包缓存、Expo本地缓存或依赖缓存存在异常
- 依赖损坏:node_modules安装不完整,尤其是metro相关依赖存在文件缺失
- 静态资源引入错误:引入图片、字体等静态资源时,路径指向资源所在目录而非具体的资源文件
- 打包配置错误:自定义的
metro.config.js或Babel别名配置存在错误,导致模块解析指向了目录
修复方案
按优先级依次尝试以下操作:
- 排查所有导入语句
- 全局搜索近期改动过的
import/require语句,确认路径指向的是有效文件 - 若确实需要直接导入目录,需保证目录下存在对应后缀的
index入口文件,或在目录的package.json中配置main字段指向入口 - 检查所有静态资源引入路径,确认指向具体文件而非目录
- 清理缓存并重装依赖
依次执行以下命令(Windows系统可手动删除对应文件夹和文件替换rm命令):
# 停止所有Expo相关进程后执行 rm -rf node_modules package-lock.json yarn.lock npm install npx expo start --clear
- 检查自定义打包配置
- 若项目有自定义
metro.config.js,确认resolver.extensions配置包含项目用到的所有文件后缀(js、jsx、ts、tsx等) - 确认Babel模块别名配置没有指向不存在的文件或目录
- 确认
resolver.assetExts配置没有错误包含目录相关后缀
- 对比代码版本
上述方案无效时,回滚到上一个可正常运行的代码版本,对比差异定位出错的代码或配置改动。
内容的提问来源于stack exchange,提问作者THANUSH
相关产品推荐
相关产品推荐

