You need to enable JavaScript to run this app. React Native配置后启动报EMFILE too many open files错误求助
优惠活动
大模型
产品
解决方案
定价
更多

React Native配置后启动报EMFILE too many open files错误求助

问题核心说明

这个EMFILE报错的本质是操作系统对单用户/单进程可打开的文件描述符数量设置了上限,Expo的项目文件监听机制会批量跟踪项目目录下的所有文件变动,当系统默认阈值过低时,就会因为同时打开的文件数超限触发崩溃,和项目业务代码、npm依赖本身没有关联。
执行npm start出现的ELIFECYCLE报错是连带反应:底层expo start进程已经因为文件数超限崩溃,所以npm捕获到进程异常退出抛出对应提示,不需要单独排查npm配置。

分步骤解决方案

1. 临时验证问题根因

  • 先在终端执行命令查看当前系统默认的文件描述符阈值:ulimit -n,默认值通常为256或1024,远低于Expo项目运行的实际需求
  • 临时调高当前终端会话的阈值,执行命令:ulimit -n 65535
  • 阈值调整完成后,直接重新执行expo start验证是否能正常启动。如果能正常启动,说明问题确实出自系统文件数限制。

2. 永久调整系统文件数限制

很多人参考社区方案调整配置后没生效,核心原因是没有完全覆盖系统多层级的限制配置,按顺序操作即可:

  • 编辑全局系统配置文件:sudo nano /etc/launchd.conf,在文件内添加两行配置:
    limit maxfiles 65536 200000
    limit openfiles 65536 200000
    
  • 编辑当前用户的Shell环境配置(macOS默认使用zsh,Linux用户根据自身使用的bash/zsh选择对应配置文件):nano ~/.zshrc,在文件末尾添加:
    ulimit -n 65535
    
  • 保存配置后执行source ~/.zshrc让用户级配置立即生效。
  • 关键注意点:全局launchd的配置无法通过重启终端生效,必须注销当前系统账号重新登录,甚至重启整机,全局限制才会加载,这是多数人配置后无效的核心原因。

3. 项目层面优化文件监听规则

从根源减少不必要的文件扫描,降低文件描述符占用:

  • 在项目根目录下新建.watchmanconfig配置文件(Expo默认使用Watchman作为文件监听工具),写入以下内容,排除所有不需要监听变动的目录:
    {
      "ignore_dirs": ["node_modules", ".git", "ios", "android", "dist", "web"],
      "settle": 2000
    }
    
  • 清除Watchman的历史缓存后再启动项目,执行命令:watchman watch-del-all && watchman shutdown-server
  • 带缓存清除参数启动Expo:expo start -c

内容的提问来源于stack exchange,提问作者m_s_a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 11:24:09