Sass --watch命令无法监听文件变化问题求助
Hey there! Let's tackle this frustrating Sass watch issue you're facing. It's super annoying when the command generates files initially but fails to pick up changes—here are some targeted fixes tailored to your setup:
1. 强制启用轮询模式(针对共享文件夹场景)
Your path /media/sf_websites looks like a VirtualBox shared folder. These types of filesystems often don't support Linux's native inotify file change notifications, which Sass relies on by default. To work around this, add the --poll flag to your watch command—it forces Sass to periodically check for file changes instead of waiting for system notifications:
sass --watch --poll '/media/sf_websites/projects/minimvc/webroot/templates/css/sass':'/media/sf_websites/projects/minimvc/webroot/templates/css'
This will use a bit more system resources than native inotify, but it’s reliable for shared filesystem setups.
2. 停止使用sudo执行监听命令
Running sass --watch with sudo means it’s executing as the root user. If you’re editing your Sass files as a regular user, root might not have permission to detect changes to those files (or vice versa). First, ensure your regular user owns the target directory:
chown -R $USER:$USER /media/sf_websites/projects/minimvc/webroot/templates/css
Then run the watch command without sudo:
sass --watch '/media/sf_websites/projects/minimvc/webroot/templates/css/sass':'/media/sf_websites/projects/minimvc/webroot/templates/css'
Aligning the user running Sass with the user editing files often fixes permission-related listening gaps.
3. 检查并调整inotify限制
Linux has default limits on how many files can be monitored via inotify. If your project has a large number of files, this limit might get hit, causing Sass to stop detecting changes.
First, check the current limit:
cat /proc/sys/fs/inotify/max_user_watches
If the number is low (e.g., under 8192), increase it temporarily:
sudo sysctl -w fs.inotify.max_user_watches=524288
To make this change permanent, edit /etc/sysctl.conf and add this line:
fs.inotify.max_user_watches=524288
Then apply the change:
sudo sysctl -p
4. 升级到Dart Sass(替换Ruby Sass)
Ruby Sass (your version 3.5.4) is no longer maintained—official support ended in 2019. Dart Sass is the current recommended implementation, and it has more reliable cross-platform file watching, especially in edge cases like shared filesystems.
First, uninstall Ruby Sass:
sudo gem uninstall sass
Then install Dart Sass:
- Grab the latest Linux binary archive, extract it, and move the
sassexecutable to/usr/local/binso it’s available in your system PATH. - Test the installation:
sass --version
Once installed, run your watch command as usual—Dart Sass’s watcher should handle file changes far more consistently.
内容的提问来源于stack exchange,提问作者Djihell

