错误:EMFILE:打开的文件太多 - React Native CLI

Posted

技术标签:

【中文标题】错误:EMFILE:打开的文件太多 - React Native CLI【英文标题】:Error: EMFILE: too many open files - React Native CLI 【发布时间】:2019-11-02 20:50:38 【问题描述】:

我尝试使用 react-native start 运行 react-native-cli 项目,但 Metro 捆绑器失败,提示如下:

events.js 187
throw er; //Unhandled 'error' event

Error: EMFILE: too many open files, watch

Emitted 'error' event on NodeWatcher isntance at:
     at NodeWatcher: checkedEmitError (.../react-native-project/node_modules/sane/src/node_watcher.js:143:12)
     at FSWatcher.emit (events.js:210:5)
     at FSEvent.FSWatcher:_handle onchange (internal/fs/watchers.js:129:12) 
   errno: -24,
   syscall: 'watch',
   code : 'EMFILE',
   filename: null
)
Process terminated. Press <enter> to close the window

【问题讨论】:

请标记我的答案是否对你有帮助 尝试您的解决方案后我仍然遇到问题。 尝试在终端上设置ulimit:ulimit 4096 切换到节点 16 为我解决了这个问题 nvm alias default 16 【参考方案1】:

只需关闭所有其他文件,然后重试。如果您在 android 上运行,请确保在 react-native run-android 之前运行 cd android./gradlew clean。 如果这不能解决,您的文件监视服务可能存在问题。试试这个

$ brew update
$ brew install watchman

【讨论】:

我在 ios 上运行。而且我没有看到任何正在运行的文件 这个问题是为我提出的,因为我有两个 react-native 项目在不同的目录中运行,具有不同的版本。 brew upgrade watchman帮了我 在 Catalina 中,有时守望者无权访问项目所在的 Document 文件夹,因此会出现此错误,请确保您已获得所需的权限,否则请尝试再次删除和添加守望者。 Running brew reinstall watchman 终于为我修复了错误(必须做 xcode-select --install 才能让它工作)。在我这样做之后,它要求访问 Document 文件夹的权限。 为我工作,我在 Mac M1 上使用 Bigsur,我从 nodejs 16 升级到 17(相当作曲家)我遇到了这个问题,用arch -arm64 brew install watchman 安装守望帮助了我,我在评论以防有人遇到同样的问题【参考方案2】:

我使用的是 Mac 并收到 EMFile 错误。安装文件观察器时解决了

brew install watchman

【讨论】:

这对我有用。我正在使用 Macbook pro M1 芯片 MacOS Big Sur。节点版本为 14.16.0。我在处理使用 Expo 创建的 React 本机项目时遇到了问题。 brew install watchman 为我工作。谢谢 这对我有用:1 - 删除节点模块 2 - brew reinstall watchman 3 - 安装节点模块 4 - 然后尝试构建项目【参考方案3】:

就我而言,升级 watchman 并没有帮助。

这个问题是在更新 Node.js 后开始发生的。

感谢nvm,我回到节点v8.11.3(我更新到v12.0.4),这个问题就消失了。

这可能会帮助你们中的一些人遇到同样的问题......

【讨论】:

这也确实发生在我身上。我刚刚从 Node 10.16.2 升级到最新的 LTS(在撰写本文时 12.16.1)并遇到了这个问题。我将.nvmrc 调回10.16.2,它就像一个魅力。 这里也一样。该死的节点 12。 我相信这对我来说是解决办法。降级 Node 为我解决了这个问题 Node v14.17.4 对我有同样的错误。 @MarceloSouza,您能告诉我您的确切节点版本吗?提前致谢。 如果您之前使用损坏的版本安装了节点版本,请在更改节点版本后重新安装 node_modules【参考方案4】:

我使用的是 MAC 和 Node v12.13.1。我升级了守望者,问题得到了解决。

watchman 4.9.0_2 -&gt; 4.9.0_4

【讨论】:

完成此操作后,我能够解决我的问题。非常感谢。【参考方案5】:

我在升级节点版本后遇到了这个问题。就我而言,降级不是一种选择。

brew install watchman 没有解决这个问题,因为我的机器上已经安装了 watchman。 brew upgrade watchman 帮了我大忙。

【讨论】:

这个命令:“brew upgrade watchman”对我有用。【参考方案6】:

就我而言,我认为这个错误是由于节点升级而发生的。

删除node_modules文件夹并运行npm install解决了这个问题。

【讨论】:

【参考方案7】:

TLTR:brew install watchman 在 Macbook 上解决了它。

我刚买了一台新的 Macbook,在 React Native 项目中遇到了同样的问题。在 Windows 上,该项目运行良好,但在 Mac 中,使用 npm start 运行项目几秒钟后,它因以下错误而崩溃:

Error: EMFILE: too many open files, watch
    at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:178:28)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ start: `expo start`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the @ start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

PS:npm install 没用。必须是brew install

【讨论】:

这如何解决问题?和Node版本有关吗? 我有一台节点为 14.17.0 的 Macbook Air M1,由于某种原因,我在尝试运行 expo 应用程序时遇到了上述错误。安装 Watchman 修复了该错误。我猜可能 Node 附带的 watchman 版本比要求的要旧。【参考方案8】:

我需要安装watchmanbrew,就像其他人在这里所做的那样,但是我还需要使用以下行更新React Native Xcode build scriptexport PATH=/opt/homebrew/bin:$PATH,以便xCode 可以在我的M1 MacBook Pro 中找到watchman

React Native Xcode 构建脚本位置:./node_modules/react-native/scripts/react-native-xcode.sh

【讨论】:

这对我来说是解决办法 - 谢谢!【参考方案9】:

对我来说,一个简单的upgrade watchman 没有帮助,更改我的 Node 版本也没有。

我正在使用 XCode 12.5 在 M1 Mac 上进行构建,并且必须:

使用 x86_64 自制程序实例安装 watchman 在 Rosetta 终端中运行 Metro 服务器 不使用 Rosetta运行 XCode

如果这是您第一次使用 x86_64 自制程序实例安装软件包,请记住将其添加到您的 PATH。

【讨论】:

哇,这也为我解决了这个问题?我没想到在 Rosetta 模式下运行终端。【参考方案10】:

在安装 php Storm 后,我遇到了一堆这样的错误以及其他一些错误,例如找不到“Podfile.lock”等。

我根据 *** 搜索的组合执行了以下操作来更正错误:

    下载、安装并同意 XCode 许可 通过 brew.sh 的终端窗口安装 brew 安装节点 按照 PHPStorm 中 iOS 终端窗口中的说明进行操作

现在开始工作了!

【讨论】:

【参考方案11】:

尝试“brew install watchman”命令,

如果“brew”未安装,请按照以下步骤操作

关注this steps,这对我有用。

【讨论】:

【参考方案12】:

在我的情况下,我在将开发机器从 Linux 切换到 OS X 后遇到了这个错误。在我运行 brew upgrade watchman 之前,上述方法都不适合我。

【讨论】:

【参考方案13】:

我通过macports 安装了守望者。然而,“Bundle React Native 代码和图像”构建阶段不知道 watchman 的路径。 添加

export PATH=/opt/local/bin:$PATH

在脚本的开头为我解决了这个问题

【讨论】:

【参考方案14】:

以下步骤在 MacOS 上对我有用:

    从官方网站https://brew.sh/更新/安装 Homebrew 安装 Watchman:b重新安装 watchman

【讨论】:

以上是关于错误:EMFILE:打开的文件太多 - React Native CLI的主要内容,如果未能解决你的问题,请参考以下文章

React Native + Jest EMFILE:打开文件过多错误

android EMFILE(打开的文件太多)

EMFile:打开的文件太多,观看 - 构建 Release 反应原生 iOS 应用程序

nodejs应用程序中未处理的错误EMFILE

使用 Jest 进行测试失败并出现错误:查看文件以进行更改时出错:EMFILE

react-native运行样例报错:Error watching file for changes: EMFILE