Я хотел бы сделать свой веб-сайт максимально эффективным, и частью этого является минимизация моих файлов CSS и JavaScript. Моя цель — иметь возможность использовать неминифицированные файлы в разработке, а минифицированные — в производстве. Итак, я думаю, что мои неминифицированные имена файлов будут нормальными (foo.css), а мои минифицированные имена файлов будут такими же, только с символом подчеркивания в начале (_foo.css).
Поскольку среда разработки не использует мини-файлы, мне не нужно беспокоиться об их актуальности. Единственный раз, когда они должны быть сгенерированы, это когда я делаю коммит в Git-репозиторий веб-сайта. Так что имеет смысл сделать это хуком Git, чего я никогда раньше не делал. Я бы хотел, чтобы этот крючок был на месте и для моих коллег. Я на Mac, а они на Linux. У меня есть работающий сценарий оболочки, но есть две вещи, которые необходимо изменить, чтобы его можно было использовать в качестве хука Git и для использования моими коллегами. В этих двух вещах мне нужна помощь. Но сначала код:
#!/bin/bash
# The files to ignore are already minified.
css_files_to_ignore=(
"jquery.colorbox-min.css"
);
js_files_to_ignore=(
"jquery.colorbox-min.js"
);
base_folder=/Applications/MAMP/htdocs/my_project/app/webroot
yuicompressor_path=/Applications/yuicompressor.jar
function process_assets() {
extension=$1
files_minified=0
for infile in $(echo "$base_folder/$extension/*.$extension")
do
[[ -f $infile ]] || continue
filename=${infile##*/}
# If the filename starts with an underscore, that means that the file is a
# minified file that was previously generated.
[[ ${filename:0:1} != "_" ]] || continue
ignore_this_file=false
files_to_ignore=$extension"_files_to_ignore"
for i in $(eval echo \${$files_to_ignore[@]})
do
if [[ $i == $filename ]]; then
ignore_this_file=true
break
fi
done
if [ $ignore_this_file == false ]; then
minified_file="$base_folder/$extension/_$filename"
if [ ! -f "$minified_file" ] || test $infile -nt $minified_file; then
java -jar $yuicompressor_path "$infile" -o "$minified_file"
((files_minified++))
fi
fi
done
if [ $extension == "css" ]; then
file_type=CSS
else
file_type=JavaScript
fi
echo -n "$files_minified $file_type file"
if [ "$files_minified" == "1" ]; then
echo -n " was"
else
echo -n "s were"
fi
echo " minified"
}
if [ -f $yuicompressor_path ]; then
process_assets css
process_assets js
else
echo "YUI Compressor was not found. Aborting."
exit 1
fi
Первое, с чем мне нужна помощь, это как обращаться с переменной base_folder
. Поскольку это будет хук Git, как установить эту переменную? Повлияет ли текущий рабочий каталог на момент фиксации на скрипт?
Второе, с чем мне нужна помощь, это как обращаться с переменной yuicompressor_path
. Как я уже говорил ранее, у меня Mac, а у моих коллег Linux. Я бы хотел, чтобы хук Git работал на всех нас, если это возможно. Могу ли я установить эту переменную так, чтобы она работала для всех нас?
Благодарю вас!