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

77

我尝试使用react-native start命令运行一个react-native-cli项目,但是Metro Bundler失败了,并显示以下错误信息:

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

如果我的回答对您有帮助,请标记为正确答案。 - Romit Kumar
1
我在尝试了你的解决方案后仍然存在问题。 - Amir
尝试在终端上设置ulimit:ulimit 4096。 - Romit Kumar
切换到 Node 16 对我来说解决了这个问题 nvm alias default 16 - Anil
@Amir 你有没有找到解决办法来修复上述的打开文件过多的问题?我们在使用React Native 0.63.3和Ventura Mac OS时也遇到了这个问题。 - Vineeta
22个回答

102

只需关闭其他文件,然后重试。如果您正在运行Android,请确保在运行react-native run-android之前运行cd android./gradlew clean。 如果这样仍无法解决问题,则可能是您的文件监视服务出现问题。请尝试以下操作

$ brew update
$ brew install watchman

2
我正在运行iOS系统,但是我没有看到任何正在运行的文件。 - Amir
这个问题不仅限于React。我在运行“Jest”时遇到了这个问题。看起来这是一个iOS问题。当安装了“watchman”后,工具似乎会使用它来监视文件更改。Watchman可以监视大量的文件。因此,安装它很可能会解决这个问题。 - HelloWorld101
1
这个问题是因为我有两个不同目录下运行的react-native项目,而且它们使用了不同的版本。执行 brew upgrade watchman 解决了我的问题。 - Radha Manohar
2
在Catalina中,有时候watchman没有访问项目所在的Document文件夹的权限,因此会出现这个错误,请确保您已经授予了必要的权限,否则请尝试删除并重新添加watchman。 - Divyanshu Negi
4
运行 brew reinstall watchman 最终解决了我的问题(还需要运行xcode-select --install 才能生效)。在这之后,它要求我允许访问文档文件夹。 - Dror Bar
2
对我有用,我正在使用Mac M1上的Bigsur,并从nodejs 16升级到了17(实际上是composer升级的)。 我曾经遇到过这个问题,通过arch -arm64 brew install watchman安装watchman帮助了我,我在这里评论以防其他人遇到同样的问题。 - TGod-Ajayi

48

我正在使用一台Mac电脑,出现了EMFile错误。当我安装文件监视器后,该问题得到解决。

brew install watchman


这对我有用。我正在使用Macbook Pro M1芯片的MacOS Big Sur。Node版本是14.16.0。在使用Expo创建的React Native项目中工作时,我遇到了问题。brew install watchman对我有用。谢谢。 - Gulam Hussain
2
这是对我有效的解决方案: 1- 删除节点模块 2- 重新安装watchman 3- 安装节点模块 4- 然后尝试构建项目 - Manju JK

29
在我的情况下,升级观察者并没有起到帮助作用。 在我更新了Node.js之后,出现了这个问题。 感谢“nvm”的使用,我回退到了node v8.11.3(我升级到v12.0.4),这个问题就消失了。 这可能会帮助一些遇到相同问题的人…

3
对我来说也是这样。我刚从Node 10.16.2升级到最新的LTS版本(在撰写本文时是12.16.1),然后遇到了这个问题。我将.nvmrc降回到10.16.2,它就像魔法般正常工作了。 - John T
一样的情况。该死的Node 12。 - phatmann
我相信这对我来说是解决方法。降级 Node 对我解决了这个问题。 - Amir
Node v14.17.4 对我来说也有同样的错误。@MarceloSouza,您能告诉我您的确切Node版本吗?先感谢了。 - Bayu
1
如果您之前使用错误的版本安装了 node_modules,请在更改节点版本后重新安装它们。 - geg
@John T,你们有没有找到解决办法来修复上述的打开文件过多的问题?我们在使用React Native 0.63.3和Ventura MacOS时也遇到了这个问题。这是因为React Native与最新版本的Ventura MacOS不兼容吗? - Vineeta

20

我的情况是,我认为这个错误是由于节点更新引起的。

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


我的问题是节点升级。这个解决方案解决了这个问题。 - ThinkAndCode
真不敢相信这个能用,谢谢!!! - Tuan Dat Tran

15

我需要像其他人一样使用brew安装watchman,但是我还需要在React Native Xcode build script中更新这行代码:export PATH=/opt/homebrew/bin:$PATH,以便xCode能够在我的M1 MacBook Pro上找到watchman

React Native Xcode build script的位置:./node_modules/react-native/scripts/react-native-xcode.sh


1
这对我来说是解决办法-谢谢! - Tyler Church
1
这应该是一个被接受的答案!谢谢 - alexandrius
1
这对我解决了问题。我已经安装了watchman,并且在命令行运行时修复了错误,但是Xcode仍然报错,显然它不知道watchman已经安装。在构建脚本调用之前添加了export PATH命令,现在它可以正常工作了。 - undefined

12

我使用的是MAC操作系统和Node v12.13.1版本。我升级了watchman,问题得到了解决。

watchman 4.9.0_2 -> 4.9.0_4


完成这个操作后,我成功解决了我的问题。非常感谢。 - omprakash8080

10

我在升级 Node 版本后遇到了这个问题,但在我的情况下降级不是一个选项。

brew install watchman 没有解决该问题,因为 watchman 已经安装在我的机器上。对我有用的是 brew upgrade watchman


这个命令:"brew upgrade watchman" 对我很有帮助。 - Misterwyz

9
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.

提示: npm install 不起作用,需要使用 brew install


这个怎么解决问题的?跟 Node 版本有关系吗? - ryanwebjackson
我有一台搭载node 14.17.0的Macbook Air M1电脑,试图运行expo应用程序时却遇到了上述错误。安装Watchman后,该错误得以解决。我猜测,可能是Node自带的watchman版本较旧,不符合要求。 - Lorenzo Castillo

5

谢谢您发布这个!它解决了我的问题。尽管文档提到这些仅适用于 macOS 10.6 和 更早版本,但在我的情况下(macOS 13.0)它们也起作用了。 - Abdulazeez Salam

3

尝试了所有方法但是没有任何改变。

2天后 ->

只需要执行 killall node 命令,

然后重启电脑,这对我起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接