React Native Error: ENOSPC: System limit for number of file watchers reached
React Native Error: ENOSPC: System limit for number of file watchers reached
我已经设置了一个新的空白 React 本机应用程序。
安装几个节点模块后出现此错误。
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)
我知道这与 watchman 没有足够的 space 来监视所有文件更改有关。
我想知道在这里采取的最佳行动方案是什么?
我是否应该通过将 node_modules
文件夹添加到 .watchmanconfig
来忽略它?
Linux 使用 inotify 包来观察文件系统事件、单个文件或目录。
由于 React / Angular 在保存时热重新加载和重新编译文件,因此需要跟踪所有项目的文件。增加 inotify 监视限制应该隐藏警告消息。
您可以尝试编辑
# insert the new value into the system config
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
# check that the new value was applied
cat /proc/sys/fs/inotify/max_user_watches
# config variable name (not runnable)
fs.inotify.max_user_watches=524288
这个错误的意思是系统监控的文件数量已经达到限制!!
结果:命令执行失败!或者抛出警告(比如执行一个react-native start VSCode)
解决方案:
修改系统监控文件个数
Ubuntu
sudo gedit /etc/sysctl.conf
在底部加一行
fs.inotify.max_user_watches=524288
然后保存退出!
sudo sysctl -p
检查一下
那就解决了!
"Visual Studio Code is unable to watch for file changes in this large workspace"(错误 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 是可以观看的最大文件数,但如果您处于内存特别受限的环境中,您可能希望降低该数字。每个文件 watch 占用 540 字节(32 位)或 ~1kB(64 位),因此假设所有 524,288 个 watch 都被消耗,结果上限约为 256MB(32 位)或 512MB(64 位) ).
Another option
是使用 files.watcherExclude 设置从 VS Code 文件观察器中排除特定的工作区目录。 files.watcherExclude 的默认值排除 node_modules 和 .git 下的一些文件夹,但您可以添加其他不希望 VS Code 跟踪的目录。
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/node_modules/*/**": true
}
您可以修复它,增加 inotify 观察者的数量。
如果您对技术细节不感兴趣,只想让 Listen 工作:
如果您使用的是 运行Debian、RedHat 或其他类似的 Linux 发行版,运行 在终端中输入以下内容:
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
如果你是运行ning ArchLinux,运行用下面的命令代替
$ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system
然后将其粘贴到您的终端中,然后按回车键 运行。
技术细节
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
的值
我在使用库 wifi
时遇到了同样的问题,但是当我更改我的网络时它运行良好。
更改您的网络连接
删除反应node_modules
rm -r node_modules
yarn or npm install
yarn start or npm start
如果发生错误,请再次使用此方法
我使用 sudo 解决了这个问题
即
sudo yarn start
或
sudo npm start
使用sudo解决这个问题会强制增加watchers的数量,而无需在系统设置中应用任何修改。 不建议使用 sudo 来解决此类问题,虽然这是必须由您做出的选择,但希望您明智地选择。
正如@snishalaka 已经指出的那样,您可以增加 inotify 观察者的数量。
不过,我认为默认值足够高,只有在进程未正确清理时才会达到。因此,我只是按照 related github issue 上的建议重新启动计算机,错误消息就消失了。
我在 linuxmint 发行版上遇到了这个问题。当有这么多文件夹并且 subfolders/files 我添加到我的应用程序中的 /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
改为 运行 您的应用程序。
我在基于 Debian 的发行版上开发的节点应用程序发生在我身上。首先,简单的重启解决了它,但在另一个应用程序上又发生了。
因为它与inotify用来监视文件和查找目录变化的watcher数量有关,所以你必须设置一个更大的数量作为限制:
我能够从发布的答案中解决它 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
发生的事情
希望对您有所帮助!
请参考此link[1]。 Visual Studio 代码中提到了对此错误消息的简要解释。我也遇到了同样的错误。在相关文件中添加以下参数将解决此问题。
fs.inotify.max_user_watches=524288
首先你可以运行每次使用root权限
sudo npm start
或者您可以删除node_modules文件夹并使用npm install
重新安装
或者您可以获得永久解决方案
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
如果您是 运行 您在 Docker 中的项目,您应该在主机中执行 echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
和所有其他命令,因为容器将自动继承该设置(并且直接在里面做是行不通的)。
回答晚了,已经有很多好的答案了。
如果您想要一个简单的脚本来检查最大文件监视是否足够大,如果不够大,请增加限制,这里是:
#!/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
,但您可以随意设置您想要的限制。
另一个简单而好的解决方案是将其添加到 jest 配置中:
watchPathIgnorePatterns: ["<rootDir>/node_modules/", "<rootDir>/.git/"]
这将忽略指定的目录以减少被扫描的文件
虽然几乎每个人都建议增加观察者的数量,但我不同意这是一个解决方案。
在我的例子中,我想完全禁用 watcher,因为 运行 在 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
记住这个问题是重复的:在 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 只需点击 link。
我尝试按照建议增加数字,但没有用。
我看到当我登录我的 VM 时,它显示“需要重新启动”
我重新启动了 VM,它成功了
sudo 重启
简单的解决方案
我发现以前的解决方案在我的情况下效果很好。我删除了 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 位系统),或
- 1 kB(双 - 在 64 位上 OS
因此,如果您允许使用 512MB(在 64 位上),则将值设置为 524288。
换句话说,您可以将要设置的内存量乘以 1024。
示例:
512 * 1024 = 52488
1024 * 1024 = 1048576
它显示了当前使用的 inotify-consumers 的确切数量。所以你可能有更好的想法,你应该增加多少限制。
在设置 fs.inotify.max_user_watches
后使用 sysctl -p
方法对我不起作用(顺便说一下,此设置已经设置为高值,可能是我前阵子试图解决这个问题之前,使用上面通常推荐的解决方法)。
我找到的问题的最佳解决方案 here,下面我分享解决它的执行步骤 - 在我的例子中,问题是在 运行 宁 visual studio 代码时发现的,但在其他情况下解决问题应该是一样的,比如你的:
- 使用 this script 确定会话中哪些进程需要最多的文件观察程序。
- 然后您可以使用
sysctl fs.inotify.{max_queued_events,max_user_instances,max_user_watches}
查询当前的 max_user_watches 值,然后将其设置为不同的值(可以使用较低的值)
sudo sysctl -w fs.inotify.max_user_watches=16384
- 或者您可以简单地
kill
您在 (1) 中找到的消耗最多文件观察者的进程(在我的例子中,baloo_file
)
- 然而,在重新启动系统时可能需要再次执行上述操作 - 我们确定负责处理大部分文件观察程序的进程将(在我的情况下 - baloo_file) - 将再次执行下次启动时也一样。因此,要永久解决此问题 - 禁用或删除此 service/package。我禁用了它:
balooctl disable
.
现在 运行 sudo code --user-data-dir
并且这次它应该 vscode 以管理员权限打开。 (顺便说一下,当它没有时 - 运行 sudo code --user-data-dir --verbose
看看问题是什么 - 这就是我发现它与文件观察者限制有关的方式)。
更新:
您可以配置 VS 代码 file watcher exclusion patterns as described here。这可能被证明是最终的解决方案,我只是不确定你是否会事先知道哪些文件你不感兴趣。
解决这个问题很容易
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
和运行你的项目。
如果您的 /etc/sysctl.conf
中有 fs.inotify.max_user_watches=524288
,
运行 相同的命令(echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
)。 运行 你的项目
如果您使用 vs 代码编辑器,则任何编辑器都会因项目中的大量文件而出错。 node_modules 并且不需要在其中构建,因此在列表中删除。全部在 vs 代码文件菜单中打开
你必须过滤不需要的文件夹文件侧边栏
转到代码 > 首选项 > 设置
在搜索设置中搜索关键字“files:exclude”
添加字母
**/node_modules
**/构建
就是这样
我在 Angular 13 中添加了 tsconfig.spec.json
"exclude": [
"node_modules/",
".git/"
]
谢谢 它给了我诀窍。
对于 vs 代码,请在此处查看详细说明:
https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc
根本原因
上面的大多数答案都是关于提高限制,而不是关于消除根本原因,这通常只是一个多余的手表,通常用于 node_modules.
中的文件
Webpack
答案在 webpack 5 文档中:
watchOptions: { ignored: /node_modules/ }
简单阅读这里:https://webpack.js.org/configuration/watch/#watchoptionsignored
文档甚至将此作为“提示”提及:
If watching does not work for you, try out this option. This may help
issues with NFS and machines in VirtualBox, WSL, Containers, or
Docker. In those cases, use a polling interval and ignore large
folders like /node_modules/ to keep CPU usage minimal.
VS 代码
VS Code 或任何代码编辑器也会创建大量文件监视。默认情况下,其中许多是完全多余的。在这里阅读更多相关信息:https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc
我使用 ubuntu 20 服务器并在文件中添加:/etc/sysctl.conf 下面一行
fs.inotify.max_user_watches=524288
然后保存文件并运行 sudo sysctl -p
之后一切正常!
通常我们不需要增加文件观察器的数量
在这种情况下,我们将有更多的观察者
我们需要删除多余的 watchers 成为僵尸
问题是我们有很多文件观察器正在填满我们的内存
我们只需要删除这些文件观察器(在节点的情况下)
killall node
尝试重新启动
我建议先重启系统,然后再观察。
我已经设置了一个新的空白 React 本机应用程序。
安装几个节点模块后出现此错误。
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)
我知道这与 watchman 没有足够的 space 来监视所有文件更改有关。
我想知道在这里采取的最佳行动方案是什么?
我是否应该通过将 node_modules
文件夹添加到 .watchmanconfig
来忽略它?
Linux 使用 inotify 包来观察文件系统事件、单个文件或目录。
由于 React / Angular 在保存时热重新加载和重新编译文件,因此需要跟踪所有项目的文件。增加 inotify 监视限制应该隐藏警告消息。
您可以尝试编辑
# insert the new value into the system config
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
# check that the new value was applied
cat /proc/sys/fs/inotify/max_user_watches
# config variable name (not runnable)
fs.inotify.max_user_watches=524288
这个错误的意思是系统监控的文件数量已经达到限制!!
结果:命令执行失败!或者抛出警告(比如执行一个react-native start VSCode)
解决方案:
修改系统监控文件个数
Ubuntu
sudo gedit /etc/sysctl.conf
在底部加一行
fs.inotify.max_user_watches=524288
然后保存退出!
sudo sysctl -p
检查一下
那就解决了!
"Visual Studio Code is unable to watch for file changes in this large workspace"(错误 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 是可以观看的最大文件数,但如果您处于内存特别受限的环境中,您可能希望降低该数字。每个文件 watch 占用 540 字节(32 位)或 ~1kB(64 位),因此假设所有 524,288 个 watch 都被消耗,结果上限约为 256MB(32 位)或 512MB(64 位) ).
Another option
是使用 files.watcherExclude 设置从 VS Code 文件观察器中排除特定的工作区目录。 files.watcherExclude 的默认值排除 node_modules 和 .git 下的一些文件夹,但您可以添加其他不希望 VS Code 跟踪的目录。
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/node_modules/*/**": true
}
您可以修复它,增加 inotify 观察者的数量。
如果您对技术细节不感兴趣,只想让 Listen 工作:
如果您使用的是 运行Debian、RedHat 或其他类似的 Linux 发行版,运行 在终端中输入以下内容:
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
如果你是运行ning ArchLinux,运行用下面的命令代替
$ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system
然后将其粘贴到您的终端中,然后按回车键 运行。
技术细节
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
的值
我在使用库 wifi
时遇到了同样的问题,但是当我更改我的网络时它运行良好。
更改您的网络连接
删除反应node_modules
rm -r node_modules
yarn or npm install
yarn start or npm start
如果发生错误,请再次使用此方法
我使用 sudo 解决了这个问题 即
sudo yarn start
或
sudo npm start
使用sudo解决这个问题会强制增加watchers的数量,而无需在系统设置中应用任何修改。 不建议使用 sudo 来解决此类问题,虽然这是必须由您做出的选择,但希望您明智地选择。
正如@snishalaka 已经指出的那样,您可以增加 inotify 观察者的数量。
不过,我认为默认值足够高,只有在进程未正确清理时才会达到。因此,我只是按照 related github issue 上的建议重新启动计算机,错误消息就消失了。
我在 linuxmint 发行版上遇到了这个问题。当有这么多文件夹并且 subfolders/files 我添加到我的应用程序中的 /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
改为 运行 您的应用程序。
我在基于 Debian 的发行版上开发的节点应用程序发生在我身上。首先,简单的重启解决了它,但在另一个应用程序上又发生了。
因为它与inotify用来监视文件和查找目录变化的watcher数量有关,所以你必须设置一个更大的数量作为限制:
我能够从发布的答案中解决它 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
发生的事情希望对您有所帮助!
请参考此link[1]。 Visual Studio 代码中提到了对此错误消息的简要解释。我也遇到了同样的错误。在相关文件中添加以下参数将解决此问题。
fs.inotify.max_user_watches=524288
首先你可以运行每次使用root权限
sudo npm start
或者您可以删除node_modules文件夹并使用
npm install
重新安装或者您可以获得永久解决方案
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
如果您是 运行 您在 Docker 中的项目,您应该在主机中执行 echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
和所有其他命令,因为容器将自动继承该设置(并且直接在里面做是行不通的)。
回答晚了,已经有很多好的答案了。
如果您想要一个简单的脚本来检查最大文件监视是否足够大,如果不够大,请增加限制,这里是:
#!/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
,但您可以随意设置您想要的限制。
另一个简单而好的解决方案是将其添加到 jest 配置中:
watchPathIgnorePatterns: ["<rootDir>/node_modules/", "<rootDir>/.git/"]
这将忽略指定的目录以减少被扫描的文件
虽然几乎每个人都建议增加观察者的数量,但我不同意这是一个解决方案。 在我的例子中,我想完全禁用 watcher,因为 运行 在 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
记住这个问题是重复的:在 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 只需点击 link。
我尝试按照建议增加数字,但没有用。
我看到当我登录我的 VM 时,它显示“需要重新启动”
我重新启动了 VM,它成功了
sudo 重启
简单的解决方案
我发现以前的解决方案在我的情况下效果很好。我删除了 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 位系统),或
- 1 kB(双 - 在 64 位上 OS
因此,如果您允许使用 512MB(在 64 位上),则将值设置为 524288。
换句话说,您可以将要设置的内存量乘以 1024。
示例:
512 * 1024 = 52488
1024 * 1024 = 1048576
它显示了当前使用的 inotify-consumers 的确切数量。所以你可能有更好的想法,你应该增加多少限制。
在设置 fs.inotify.max_user_watches
后使用 sysctl -p
方法对我不起作用(顺便说一下,此设置已经设置为高值,可能是我前阵子试图解决这个问题之前,使用上面通常推荐的解决方法)。
我找到的问题的最佳解决方案 here,下面我分享解决它的执行步骤 - 在我的例子中,问题是在 运行 宁 visual studio 代码时发现的,但在其他情况下解决问题应该是一样的,比如你的:
- 使用 this script 确定会话中哪些进程需要最多的文件观察程序。
- 然后您可以使用
sysctl fs.inotify.{max_queued_events,max_user_instances,max_user_watches}
查询当前的 max_user_watches 值,然后将其设置为不同的值(可以使用较低的值)sudo sysctl -w fs.inotify.max_user_watches=16384
- 或者您可以简单地
kill
您在 (1) 中找到的消耗最多文件观察者的进程(在我的例子中,baloo_file
) - 然而,在重新启动系统时可能需要再次执行上述操作 - 我们确定负责处理大部分文件观察程序的进程将(在我的情况下 - baloo_file) - 将再次执行下次启动时也一样。因此,要永久解决此问题 - 禁用或删除此 service/package。我禁用了它:
balooctl disable
.
现在 运行 sudo code --user-data-dir
并且这次它应该 vscode 以管理员权限打开。 (顺便说一下,当它没有时 - 运行 sudo code --user-data-dir --verbose
看看问题是什么 - 这就是我发现它与文件观察者限制有关的方式)。
更新:
您可以配置 VS 代码 file watcher exclusion patterns as described here。这可能被证明是最终的解决方案,我只是不确定你是否会事先知道哪些文件你不感兴趣。
解决这个问题很容易
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
和运行你的项目。
如果您的 /etc/sysctl.conf
中有 fs.inotify.max_user_watches=524288
,
运行 相同的命令(echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
)。 运行 你的项目
如果您使用 vs 代码编辑器,则任何编辑器都会因项目中的大量文件而出错。 node_modules 并且不需要在其中构建,因此在列表中删除。全部在 vs 代码文件菜单中打开
你必须过滤不需要的文件夹文件侧边栏
转到代码 > 首选项 > 设置
在搜索设置中搜索关键字“files:exclude”
添加字母
**/node_modules
**/构建
就是这样
我在 Angular 13 中添加了 tsconfig.spec.json
"exclude": [
"node_modules/",
".git/"
]
谢谢
对于 vs 代码,请在此处查看详细说明: https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc
根本原因
上面的大多数答案都是关于提高限制,而不是关于消除根本原因,这通常只是一个多余的手表,通常用于 node_modules.
中的文件Webpack
答案在 webpack 5 文档中:
watchOptions: { ignored: /node_modules/ }
简单阅读这里:https://webpack.js.org/configuration/watch/#watchoptionsignored
文档甚至将此作为“提示”提及:
If watching does not work for you, try out this option. This may help issues with NFS and machines in VirtualBox, WSL, Containers, or Docker. In those cases, use a polling interval and ignore large folders like /node_modules/ to keep CPU usage minimal.
VS 代码
VS Code 或任何代码编辑器也会创建大量文件监视。默认情况下,其中许多是完全多余的。在这里阅读更多相关信息:https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc
我使用 ubuntu 20 服务器并在文件中添加:/etc/sysctl.conf 下面一行
fs.inotify.max_user_watches=524288
然后保存文件并运行 sudo sysctl -p
之后一切正常!
通常我们不需要增加文件观察器的数量 在这种情况下,我们将有更多的观察者
我们需要删除多余的 watchers 成为僵尸
问题是我们有很多文件观察器正在填满我们的内存 我们只需要删除这些文件观察器(在节点的情况下)
killall node
尝试重新启动
我建议先重启系统,然后再观察。