我已经设置了一个新的空白react native应用。
在安装了几个节点模块后,出现此错误。
我知道这与看守人没有足够的空间来监视所有文件更改有关。
我想知道在这里采取的最佳措施是什么?
是否应该通过将node_modules
文件夹添加到.watchmanconfig
来忽略它?
答案 0 :(得分:8)
删除反应node_modules
rm -r node_modules
yarn or npm install
yarn start or npm start
如果发生错误,请再次使用此方法
答案 1 :(得分:7)
我通过使用sudo解决了这个问题 即
sudo yarn start
或
sudo npm start
答案 2 :(得分:6)
您可以对其进行修复,以增加查看警报的人数。
如果您对技术细节不感兴趣,而只想听工作:
如果您正在运行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 --system
然后将其粘贴到终端中,然后按Enter键运行它。
技术细节
Listen在Linux上默认使用inotify监视目录中的更改。遇到可以监视的文件数量受到系统限制的情况并不少见。例如,Ubuntu Lucid(64位)的inotify限制设置为8192。
您可以通过执行以下操作来获取当前的inotify文件监视限制:
$ cat /proc/sys/fs/inotify/max_user_watches
如果此限制不足以监视目录中的所有文件,则必须增加该限制以使“侦听”正常工作。
您可以使用以下方法临时设置新的限制:
$ 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
如果听众不断抱怨,您可能还需要注意max_queued_events
和max_user_instances
的值。
答案 3 :(得分:3)
您可以尝试编辑
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
cat /proc/sys/fs/inotify/max_user_watches
fs.inotify.max_user_watches=524288
答案 4 :(得分:3)
在基于Debian的发行版上开发的节点应用程序发生在我身上。首先,一个简单的重新启动解决了它,但是在另一个应用程序上又发生了
。由于inotify用来监视文件并查找目录中的更改的监视者的数量与之相关,因此您必须设置一个更大的数目作为限制:
我能够从here发布的答案中解决 (感谢他!)
所以,我跑了:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
详细了解https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details上发生的事情
希望有帮助!
答案 5 :(得分:2)
迟到的答案,已经有很多好的答案了。
如果你想要一个简单的脚本来检查最大文件监视是否足够大,如果没有,增加限制,这里是:
#!/usr/bin/env bash
let current_watches=`sysctl -n fs.inotify.max_user_watches`
if (( current_watches < 80000 ))
then
echo "Current max_user_watches ${current_watches} is less than 80000."
else
echo "Current max_user_watches ${current_watches} is already equal to or greater than 80000."
exit 0
fi
if sudo sysctl -w fs.inotify.max_user_watches=80000 && sudo sysctl -p && echo fs.inotify.max_user_watches=80000 | sudo tee /etc/sysctl.d/10-user-watches.conf
then
echo "max_user_watches changed to 80000."
else
echo "Could not change max_user_watches."
exit 1
fi
脚本将限制增加到 80000
,但您可以随意设置您想要的限制。
答案 6 :(得分:1)
此错误的意思是系统监视的文件数量已达到限制!
结果:命令执行失败!或发出警告(例如执行本机启动vsocde)
解决方案:
修改系统监视文件的数量
Ubuntu
sudo gedit /etc/sysctl.conf
在底部添加一行
fs.inotify.max_user_watches = 524288 然后保存并退出!
执行
sudo sysctl -p 检查
那就解决了!
答案 7 :(得分:1)
“ Visual Studio Code无法监视此大型工作空间中的文件更改”(错误ENOSPC)
当您看到此通知时,表明VS Code文件监视程序用尽了句柄,因为工作空间很大并且包含许多文件。可以通过运行以下命令查看当前限制:
cat /proc/sys/fs/inotify/max_user_watches
可以通过编辑将限制增加到最大
/etc/sysctl.conf
并将此行添加到文件末尾:
fs.inotify.max_user_watches = 524288
然后可以通过运行
来加载新值sudo sysctl -p
请注意,Arch Linux的工作方式略有不同,有关详细信息,请参见增加inotify观察程序。
虽然524,288是可以观看的最大文件数,但是如果您在特别受内存限制的环境中,则可能希望减少文件数。每个文件监视占用540字节(32位)或〜1kB(64位),因此假设所有524,288个监视都被消耗,则上限约为256MB(32位)或512MB(64位) )。
另一个选择
用于使用files.watcherExclude设置从VS Code文件监视程序中排除特定的工作区目录。 files.watcherExclude的默认值不包括node_modules和.git下的某些文件夹,但是您可以添加不希望VS Code跟踪的其他目录。
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/node_modules/*/**": true
}
答案 8 :(得分:1)
正如@snishalaka指出的那样,您可以增加inotify观察者的数量。
但是,我认为默认数字足够高,只有在未正确清理进程的情况下才能达到默认数字。因此,我只是按照related github issue上的建议重新启动了计算机,错误消息消失了。
答案 9 :(得分:1)
请参考此链接[1]。 Visual Studio代码已提到此错误消息的简短说明。我也遇到了同样的错误。在相关文件中添加以下参数将解决此问题。
fs.inotify.max_user_watches=524288
答案 10 :(得分:0)
我在 linuxmint 发行版上遇到了此问题。当我在应用程序的/ public文件夹中添加了如此多的文件夹和子文件夹/文件时,似乎发生了这种情况。 我应用了此修复程序,效果很好...
$
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
将目录更改为/ etc文件夹:
cd /etc
然后运行:
sudo systcl -p
您可能必须关闭终端,然后再次npm start
才能使其正常工作。
如果失败,我建议在全局安装react-scripts并直接运行您的应用程序。
$
npm i -g --save react-scripts
然后运行npm start
而不是react-scripts start
来运行您的应用程序。
答案 11 :(得分:0)
如果您正在Docker中运行项目,则应在主机中执行echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
和所有其他命令,因为容器将自动继承该设置(并且直接在其内部进行将不起作用)。
答案 12 :(得分:0)
另一个简单而好的解决方案是将其添加到 jest 配置中:
watchPathIgnorePatterns: ["<rootDir>/node_modules/", "<rootDir>/.git/"]
这会忽略指定的目录以减少被扫描的文件
答案 13 :(得分:0)
虽然几乎每个人都建议增加观察者的数量,但我不能同意这是一个解决方案。 就我而言,我想完全禁用观察者,因为在 CI 上运行的测试使用 vui-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
答案 14 :(得分:0)
记住这个问题是重复的:在original question看到这个答案
解决我的问题的一个简单方法是:
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
如果您想知道如何Increase the amount of inotify watchers 只需点击链接即可。
答案 15 :(得分:-1)
首先,您可以使用root特权每次运行
sudo npm start
或者您可以删除 node_modules 文件夹并使用npm install
重新安装
否则您将获得永久解决方案
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p