You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sass是否支持递归监听文件?升级依赖后报ENOSPC监听数超限错误

首先明确结论:你的迁移配置没有错误,也不是Sass缺少--recursive参数导致的报错。

原因说明

  1. 官方Dart Sass的--watch参数默认支持递归监听目录,不需要额外传入递归参数,旧脚本中的--recursive是node-sass-chokidar的特有参数,无需在新脚本中配置。
  2. 报错ENOSPC: System limit for number of file watchers reached的本质是操作系统允许的最大文件监听实例数量被占满,属于系统级限制,和Sass的配置逻辑无关。
  3. 替换依赖后才触发报错的原因是: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系统,执行以下命令:
    # 临时生效,重启后失效
    sudo sysctl fs.inotify.max_user_watches=524288
    # 写入配置文件,永久生效
    echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    
    如果你是macOS系统,执行以下命令:
    sudo 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:45:04