Sass是否支持递归监听文件?升级依赖后报ENOSPC监听数超限错误
首先明确结论:你的迁移配置没有错误,也不是Sass缺少--recursive参数导致的报错。
原因说明
- 官方Dart Sass的
--watch参数默认支持递归监听目录,不需要额外传入递归参数,旧脚本中的--recursive是node-sass-chokidar的特有参数,无需在新脚本中配置。 - 报错
ENOSPC: System limit for number of file watchers reached的本质是操作系统允许的最大文件监听实例数量被占满,属于系统级限制,和Sass的配置逻辑无关。 - 替换依赖后才触发报错的原因是:
node-sass-chokidar默认仅监听.scss/.sass后缀的样式文件,而Dart Sass的--watch默认会监听目标目录下的所有类型文件,占用了更多的文件监听句柄,刚好触达系统默认上限。
解决方案
你可以根据自己的使用场景选任意一种方案解决:
- 方案一:修改Sass监听规则,仅监听样式文件(推荐,无系统级修改)
调整你的watch-css脚本,指定仅匹配Sass相关后缀的文件,减少不必要的文件监听:"watch-css": "npm run build-css && sass --load-path=./src --load-path=./node_modules src/**/*.scss src/**/*.sass:src --watch" - 方案二:调整操作系统的文件监听上限(永久生效)
如果你是Linux系统,执行以下命令:
如果你是macOS系统,执行以下命令:# 临时生效,重启后失效 sudo sysctl fs.inotify.max_user_watches=524288 # 写入配置文件,永久生效 echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf sudo sysctl -psudo sysctl -w kern.maxfiles=5242880 sudo sysctl -w kern.maxfilesperproc=524288 - 方案三:沿用chokidar的监听逻辑
安装chokidar-cli替代Sass自带的监听能力,和旧版本的监听逻辑完全一致:
首先执行安装命令:npm install chokidar-cli --save-dev
之后修改脚本:"watch-css": "npm run build-css && chokidar 'src/**/*.scss' 'src/**/*.sass' -c 'sass --load-path=./src --load-path=./node_modules src:src'"
内容的提问来源于stack exchange,提问作者T H
相关产品推荐
相关产品推荐

