Last active
May 1, 2019 15:38
Star
You must be signed in to star a gist
Naive Sass watcher in Bash
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Set target dir | |
DIR=foo/bar | |
# Configure sass | |
SASS="sass --no-source-map --style=compressed" | |
function removeBOM () | |
{ | |
sed -i -e '1s/^\xEF\xBB\xBF//' $@ | |
} | |
function post_compile () | |
{ | |
if [ ! -e $1 ]; then | |
# Sass removes the files if an error occurred, so we create it again | |
# in order to re-attempt compilation | |
touch $1 | |
fi | |
removeBOM $1 | |
} | |
function compile () | |
{ | |
SCSS=$1 | |
CSS=$(echo $SCSS | sed -e 's/\.scss/.css/g') | |
# SCSS files with no CSS sibling file are "import only" SCSS files | |
if [ -f $CSS ]; then | |
echo "Writing $CSS" | |
( $SASS $SCSS $CSS ; post_compile $CSS ) & | |
fi | |
} | |
function compile_dependants () | |
{ | |
BASENAME=$(basename $path | sed -e 's/\.scss//g') | |
# Compile any file that imports this file (recursively) | |
find $DIR -name '*.scss' -exec grep -l -z -P -o '@import[^;]*'"'$BASENAME'" {} \+ | while read path; do | |
compile $path | |
compile_dependants $path | |
done | |
} | |
inotifywait -q --format "%w%f" -e "close_write,create" -m -r $DIR \ | |
| grep --line-buffered '\.scss$' \ | |
| while read path; do | |
if [ -e "$path" ] ; then | |
compile $path | |
compile_dependants $path | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment