我已经设置了一个新的空白反应本机应用程序。

在安装了几个节点模块后,我得到了这个错误。

Running application on PGN518.
internal/fs/watchers.js:173
   throw error;
   ^

Error: ENOSPC: System limit for number of file watchers reached, watch '/home/badis/Desktop/react-native/albums/node_modules/.staging'
   at FSWatcher.start (internal/fs/watchers.js:165:26)
   at Object.watch (fs.js:1253:11)
   at NodeWatcher.watchdir (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:175:20)
   at NodeWatcher.<anonymous> (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:310:16)
   at /home/badis/Desktop/react-native/albums/node modules/graceful-fs/polyfills.js:285:20
   at FSReqWrap.oncomplete (fs.js:154:5)

我知道这与没有足够的空间让守望者监视所有文件更改有关。

我想知道在这里采取的最佳行动是什么?

我应该忽略node_modules文件夹添加到.watchmanconfig ?


当前回答

我试着增加建议的数量,但它没有工作。

我看到当我登录我的虚拟机时,它显示“需要重新启动”

我重新启动VM,它工作了

sudo重启

其他回答

请参考此链接[1]。Visual Studio代码中提到了对此错误消息的简要解释。我也遇到了同样的错误。在相关文件中添加以下参数将修复此问题。

 fs.inotify.max_user_watches=524288

[1] https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-wor kspace-error-enospc

我通过使用sudo解决了这个问题 即

sudo yarn start

or

sudo npm start

使用sudo来解决这个问题将迫使观察者的数量增加,而不应用任何修改系统设置。不建议使用sudo来解决这类问题,尽管这是一个必须由您做出的选择,希望您明智地选择。

记住这个问题是重复的:见原问题的答案

解决我问题的一个简单方法是:

npm cache clear 

今天的最佳实践是

npm cache verify 

NPM或者由它控制的进程正在监视太多的文件。更新构建节点上的max_user_watches可以永远修复它。对于debian,在终端上放以下命令:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

如果你想知道如何增加inotify观察者的数量,只需要点击链接。

虽然几乎每个人都建议增加观看人数,但我不同意这是一个解决方案。 在我的情况下,我想完全禁用watcher,因为测试运行在CI上使用vi -cli插件,启动web-pack-dev服务器为每个测试。

问题是:当几个构建同时运行时,它们会失败,因为达到了观察者的限制。

首先,我尝试将以下内容添加到vue.config.js中:

module.exports = {
  devServer: {
    hot: false,
    liveReload: false
  }
}

裁判:https://github.com/vuejs/vue-cli/issues/4368 # issuecomment - 515532738

而且它可以在本地工作,但不能在CI上工作(显然,由于某种模糊的原因,它在第二天也停止了在本地工作)。

在调查了web-pack-dev服务器文档后,我发现: https://webpack.js.org/configuration/watch/#watch

然后是这个: https://github.com/vuejs/vue-cli/issues/2725#issuecomment-646777425

长话短说这最终解决了问题:

vue.config.js

module.exports = {
publicPath: process.env.PUBLIC_PATH,
devServer: {
    watchOptions: {
        ignored: process.env.CI ? "./": null,
  },
}

}

Vue 2.6.14版本

你可以修复它,增加inotify观察者的数量。

如果你对技术细节不感兴趣,只想要听工作:

如果您正在运行Debian、RedHat或其他类似的Linux发行版,请在终端中运行以下命令: $ echo fs.inotify。Max_user_watches =524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p 如果您正在运行ArchLinux,请运行以下命令 $ echo fs.inotify。Max_user_watches =524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl——系统

然后将其粘贴到您的终端,并按enter键运行它。


技术细节

Listen在Linux上默认使用inotify来监视目录的更改。系统限制可以监视的文件数量是很常见的。例如,Ubuntu Lucid(64位)的inotify限制设置为8192。

你可以通过执行以下命令来获得当前inotify文件的监视限制:

$ cat /proc/sys/fs/inotify/max_user_watches

当此限制不足以监视目录中的所有文件时,必须增加该限制以使Listen正常工作。

你可以临时设置一个新的限制:

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

如果你想让你的限制永久化,可以使用:

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

如果listen一直抱怨,您可能还需要注意max_queued_events和max_user_instances的值。