您的位置:首页 > 房产 > 建筑 > 郑州电力高等专科学校在哪个区_辽宁建设工程信息网评定分离规则_企业培训内容有哪些_网络营销推广工具有哪些

郑州电力高等专科学校在哪个区_辽宁建设工程信息网评定分离规则_企业培训内容有哪些_网络营销推广工具有哪些

2025/2/24 19:14:42 来源:https://blog.csdn.net/kaka_buka/article/details/142377391  浏览:    关键词:郑州电力高等专科学校在哪个区_辽宁建设工程信息网评定分离规则_企业培训内容有哪些_网络营销推广工具有哪些
郑州电力高等专科学校在哪个区_辽宁建设工程信息网评定分离规则_企业培训内容有哪些_网络营销推广工具有哪些

解决系统文件监视器(File Watchers)数量限制问题

在前端开发过程中,特别是使用如 ViteWebpack 等构建工具时,可能会遇到一个常见的错误:ENOSPC: System limit for number of file watchers reached。这个错误的原因是系统中可用的文件监视器数量已经达到了上限,从而无法继续监视新的文件变化。

什么是文件监视器(File Watchers)?

文件监视器是一种系统资源,用于检测文件或目录的变化。当使用类似 ViteWebpack 的构建工具时,这些工具会监视项目目录下的文件变化,以便在文件变动时触发重新编译或刷新浏览器。这种实时监控功能依赖于操作系统提供的文件监视器机制。

在 Linux 系统上,这种机制通常由 inotify 提供,而 Windows 和 macOS 有各自的实现。文件监视器允许开发工具高效监听大量文件,但系统对文件监视器数量有限制,当监视的文件超出这个限制时,就会产生 ENOSPC 错误。

错误原因

当项目规模较大或包含大量文件时,文件监视器的数量需求会急剧增加。如果系统对文件监视器的数量设置了限制,并且项目中的文件数量超过了这个限制,就会触发 ENOSPC: System limit for number of file watchers reached 错误。

通常,Linux 系统对每个用户可使用的文件监视器数量有限制,这个限制值通常保存在 /proc/sys/fs/inotify/max_user_watches 文件中。默认情况下,这个值可能较小,在处理大型项目时就容易超出这个限制。

解决方法

为了解决这个问题,可以通过以下几种方法来增加文件监视器的数量或减少文件监视器的使用。

1. 增加系统文件监视器的上限

通过修改系统配置,可以增加文件监视器的数量上限,以适应大型项目的需求。具体步骤如下:

  1. 查看当前文件监视器的限制
    你可以通过以下命令查看当前系统中允许的最大文件监视器数量:

    cat /proc/sys/fs/inotify/max_user_watches
    
  2. 临时增加文件监视器的数量
    通过以下命令可以临时增加文件监视器的数量(例如设置为 524288):

    sudo sysctl fs.inotify.max_user_watches=524288
    
  3. 永久增加文件监视器的数量
    如果你希望在系统重启后依然保持该设置,可以将其写入 /etc/sysctl.conf 文件中:

    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    

    通过这一步,你就可以确保每次系统启动时都能使用新的文件监视器上限。

2. 减少需要监视的文件数量

如果无法增加系统的文件监视器数量,另一种方法是减少构建工具需要监视的文件数量。你可以通过排除不必要的文件夹或文件来实现,比如 node_modulesdist 文件夹。在工具的配置文件中,可以通过设置 ignoreexclude 选项来排除这些目录。

例如,在 Vite 中,你可以在配置文件中排除某些目录:

export default {server: {watch: {ignored: ['**/node_modules/**', '**/dist/**'],},},
};

同样,在 Webpack 中,可以使用类似的配置排除特定文件夹:

module.exports = {watchOptions: {ignored: /node_modules/,},
};

3. 使用轮询(Polling)代替文件监视器

在某些情况下,构建工具可能支持使用轮询(polling)方式来检测文件变化。轮询不依赖于系统的文件监视器数量限制,但会消耗更多的系统资源。虽然效率不如文件监视器高,但它是一个有效的替代方案。

Vite 中,可以通过以下配置启用轮询:

export default {server: {watch: {usePolling: true,},},
};

Webpack 中,也可以通过配置启用轮询:

module.exports = {watchOptions: {poll: 1000, // 每秒检查一次变化},
};

轮询的效率较低,但它提供了一种无需依赖系统资源限制的解决方案,适合监视器资源非常紧张的情况。

报错全文

node:internal/errors:478ErrorCaptureStackTrace(err);^Error: ENOSPC: System limit for number of file watchers reached, watch '/data/soft/back/dcg_dataease/core/core-frontend/dist/assets/css/YAxisSelector-0.0.0-dataease.css'at FSWatcher.<computed> (node:internal/fs/watchers:244:19)at Object.watch (node:fs:2296:34)at createFsWatchInstance (file:///data/soft/back/dcg_dataease/core/core-frontend/node_modules/vite/dist/node/chunks/dep-41cf5ffd.js:52104:17)at setFsWatchListener (file:///data/soft/back/dcg_dataease/core/core-frontend/node_modules/vite/dist/node/chunks/dep-41cf5ffd.js:52151:15)at NodeFsHandler._watchWithNodeFs (file:///data/soft/back/dcg_dataease/core/core-frontend/node_modules/vite/dist/node/chunks/dep-41cf5ffd.js:52306:14)at NodeFsHandler._handleFile (file:///data/soft/back/dcg_dataease/core/core-frontend/node_modules/vite/dist/node/chunks/dep-41cf5ffd.js:52370:23)at NodeFsHandler._addToNodeFs (file:///data/soft/back/dcg_dataease/core/core-frontend/node_modules/vite/dist/node/chunks/dep-41cf5ffd.js:52612:21)
Emitted 'error' event on FSWatcher instance at:at FSWatcher._handleError (file:///data/soft/back/dcg_dataease/core/core-frontend/node_modules/vite/dist/node/chunks/dep-41cf5ffd.js:53803:10)at NodeFsHandler._addToNodeFs (file:///data/soft/back/dcg_dataease/core/core-frontend/node_modules/vite/dist/node/chunks/dep-41cf5ffd.js:52620:18) {errno: -28,syscall: 'watch',code: 'ENOSPC',path: '/data/soft/back/dcg_dataease/core/core-frontend/dist/assets/css/YAxisSelector-0.0.0-dataease.css',filename: '/data/soft/back/dcg_dataease/core/core-frontend/dist/assets/css/YAxisSelector-0.0.0-dataease.css'
}

参考链接

  • inotify 手册:https://man7.org/linux/man-pages/man7/inotify.7.html
  • Vite 配置文档:https://vitejs.dev/config/
  • Webpack 文件监视配置:https://webpack.js.org/configuration/watch/

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com