背景
在linux操作系统上使用vue脚手架写案例的时候,使用指令 yarn dev 不成功,发生 Error: ENOSPC: System limit for number of file watchers错误。
原因:是文件监视程序的系统产生了限制,达到了默认的上限,需要增加限额。
Inotify 是什么?
inotify 是 Linux 内核 2.6.13 (June 18, 2005) 版本新增的一个子系统(API),它提供了一种监控文件系统(基于 inode 的)事件的机制,可以监控文件系统的变化如文件修改、新增、删除等,并可以将相应的事件通知给应用程序。几乎所有的主流 Linux 发行版都支持 Inotify 机制。如何知道你的 Linux 内核是否支持 Inotify 机制呢?很简单,执行下面这条命令:
grep INOTIFY_USER /boot/config-$(uname -r)
CONFIG_INOTIFY_USER=y
如果输出 CONFIG_INOTIFY_USER=y,代表当前系统支持 Inotify 机制。
可以使用指令 sysctl fs.inotify来查看
sysctl fs.inotify
fs.inotify.max_queued_events = 16384 # inotify 管理的队列的最大长度
fs.inotify.max_user_instances = 128 # 每个用户所能创建的 Inotify 实例的上限
fs.inotify.max_user_watches = 65536 # 每个 Inotify 实例最多能关联几个监控 (watch)
或者
cat /proc/sys/fs/inotify/max_queued_events
16384
cat /proc/sys/fs/inotify/max_user_instances
128
cat /proc/sys/fs/inotify/max_user_watches
65536
解决办法
可以在linux 下修改文件监控数
1.临时限额增加可以设置新的指令:
sudo sysctl fs.inotify.max_user_watches = 524288
sudo sysctl -p
2.永久增加限额
sudo vim /etc/sysctl.conf
# 在最后面加入
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
3.减少 inotify 监控的文件数量
关闭或者减少 inotify 监控的文件。以前端开发为例,如果报错来自 VSCode ,可以关闭再重新打开 VSCode 。
如果是 Webpack 引起的错误, 可以通过在 webpack.config.js 文件中设置 watchOptions 属性,尝试排除node_modules 文件夹。
module.exports = {
//...
watchOptions: {
ignored: /node_modules/,
},
};
或者重新安装 node_modules
rm -rf node_modules # 删除 node_modules
npm cache clean --force # 强制清理 npm 缓存
pnpm install # 使用 pnpm 重新安装 node_modules

554

被折叠的 条评论
为什么被折叠?



