切换Node版本后React Native打包报EMFILE文件打开过多错误求助
React Native Android打包EMFILE错误解决方案
问题背景
原本使用Node.js v18.17.0运行React Native应用,切换到Node.js v16后切回v18.17.0,删除node_modules并重新执行npm i后,Android打包仍失败,抛出EMFILE: too many open files错误,报错位置在metro-cache/src/Cache.js。
解决步骤
清理Metro缓存与临时文件
- 执行Metro缓存清理命令:
npx metro-cache clean - 手动删除报错路径中的
metro-cache文件夹(即C:\placeholder\placeholder\placeholder\Local\Temp\metro-cache) - 清理Android构建缓存:
cd android && ./gradlew clean && cd ..
- 执行Metro缓存清理命令:
调整Windows系统文件句柄限制
- 关闭所有不必要的后台程序,减少文件占用
- 以管理员身份打开命令提示符,执行
fsutil file setmaxfiles 10000(可根据实际情况调整数值)
重置项目依赖状态
- 删除锁文件:
del package-lock.json(npm用户)或del yarn.lock(yarn用户) - 删除
node_modules文件夹:rmdir /s /q node_modules - 重新安装依赖:
npm install - 结束所有Node.js进程(打开任务管理器,终止
node.exe相关进程),再重新执行打包命令
- 删除锁文件:
临时调整Metro缓存配置(测试用)
- 修改项目根目录的
metro.config.js,临时禁用缓存:module.exports = { // 保留原有其他配置 cacheStores: [], }; - 打包成功后,恢复原有缓存配置,或更换缓存目录到权限正常、空间充足的路径
- 修改项目根目录的
内容的提问来源于stack exchange,提问作者Kritik Jambusariya
相关产品推荐
相关产品推荐

