react-native执行npm start时出现EISDIR: illegal operation on a directory, read错误
报错原因
该EISDIR: illegal operation on a directory, read报错本质是React Native的metro打包器在模块解析阶段,尝试将一个目录当作普通文件读取,触发了操作系统层面的非法操作错误。从报错栈的ModuleResolution相关调用可以确认,错误出现在依赖路径解析环节,常见触发原因如下:
- 导入语句路径书写错误,未补全文件名且对应路径是无合法入口文件的目录
- 项目中存在同名的文件和目录,模块解析时优先命中了目录
- metro缓存存在脏数据,缓存中记录的文件路径实际已被修改为目录
- package.json的main字段指向了目录而非入口文件
- 自定义的metro配置中解析规则错误,导致目录被误判为可读取的文件/资源
排查与解决方法
按照优先级从高到低执行以下操作即可:
- 第一步优先清除metro缓存重试,执行命令:
npx react-native start --reset-cache # 若使用Expo开发则执行:npx expo start --clear - 检查近期修改的导入语句,确认没有漏写文件名的情况:例如需要导入
./components/Button/index.js时,如果只写了import Button from './components/Button',需要确认Button目录下存在符合扩展名规则的入口文件(index.js/index.ts/index.tsx等) - 排查项目中是否存在同名的文件和目录,例如同时存在
utils.js文件和utils/目录,重命名其中一个即可解决冲突 - 检查根目录package.json的
main字段,确认指向的是合法的入口文件路径,而非目录 - 若自定义过
metro.config.js的resolver相关配置,可先暂时注释掉自定义配置后重启项目,验证是否是配置错误导致的解析异常 - 以上操作都无效的话,重装依赖后重试:
rm -rf node_modules package-lock.json yarn.lock npm install
内容的提问来源于stack exchange,提问作者souradeep majumdar
相关产品推荐
相关产品推荐

