在使用 nodemon 监控 Node.js 应用程序文件变化时,有时可能会遇到以下错误:
[nodemon] Internal watch failed: watch ENOSPC
这个错误表示监视器已经超过了系统的限制,因此无法更多地监测文件变化。
原因
出现此问题的原因是 Linux 系统默认情况下限制了进程可以同时监视的文件数。
可以通过运行以下命令来查看系统默认值:
$ cat /proc/sys/fs/inotify/max_user_watches
通常情况下该值为 8192。如果你的应用程序监控了大量的文件,则会很快超过这个限制,从而导致上述错误。
解决方案
解决此问题的方法是增加操作系统允许的最大文件监视数。有两种方法可以做到这一点。
方法 1:临时调整限制
可以运行以下命令临时增加文件监视器的限制:
$ sudo sysctl fs.inotify.max_user_watches=524288
这会将文件监视器的最大容量增加到 524288。请注意,当您重新启动计算机时,此更改将被重置为默认值。
方法 2:永久性调整限制
如果要使更改永久生效,则需要更新 /etc/sysctl.conf
文件。
$ sudo nano /etc/sysctl.conf
在文件的末尾添加以下行:
fs.inotify.max_user_watches=524288
保存并关闭文件,然后运行以下命令以使更改生效:
$ sudo sysctl -p
这会重新加载 /etc/sysctl.conf
文件,并将配置更改写入内核中。
示例代码
以下是一个示例 Node.js 应用程序,它监视了大量的文件,并且由于监视器的限制而触发了错误。
const fs = require('fs'); for (let i = 0; i < 10000; i++) { fs.watch('./', { recursive: true }, (eventType, filename) => { console.log(`${filename} ${eventType}`); }); }
使用上述解决方案之一可以轻松解决此问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/25526