我已经设置了一个新的空白反应本机应用程序。
在安装了几个节点模块后,我得到了这个错误。
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 ?
虽然几乎每个人都建议增加观看人数,但我不同意这是一个解决方案。
在我的情况下,我想完全禁用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版本
简单的解决方案
我发现,之前的解决方案在我的情况下很有效。我删除了node_modules并清除了yarn / npm缓存。
长尾解决方案
如果你想要一个长尾解决方案——例如,如果你经常被这个错误捕获——你可以增加允许的观察者的值(取决于你的可用内存)
要计算出当前使用的观察者数量,而不是仅仅猜测,你可以使用这个方便的bash脚本:
https://github.com/fatso83/dotfiles/blob/master/utils/scripts/inotify-consumers
我建议将max_user_watches临时设置为一个高值:
Sudo sysctl fs.inotify。Max_user_watches =95524288并运行脚本。
如何计算你可以用多少
每个观众都需要
540字节(32位系统),或
1kb(双开64位操作系统
因此,如果您允许使用512MB(在64Bit上),您将设置524288作为值。
反之,您可以将将要设置的内存量乘以1024。
例子:
512 * 1024 = 52488
1024 * 1024 = 1048576
它显示了当前使用的inotify-consumers的确切数量。所以你可能有更好的想法,你应该增加多少限制。