Сценарий Bash для YUI Compressor для использования с Git

Я хотел бы сделать свой веб-сайт максимально эффективным, и частью этого является минимизация моих файлов 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 работал на всех нас, если это возможно. Могу ли я установить эту переменную так, чтобы она работала для всех нас?

Благодарю вас!


person Nick    schedule 11.07.2012    source источник


Ответы (1)


Вы можете создать свой переменный контент на основе пути к репозиторию Git.

base_folder="$(git rev-parse --show-toplevel)"

установит base_folder равным пути к верхнему уровню репозитория Git. Если вам нужно установить его на дополнительный путь, просто добавьте его позже, например. если бы ваш репозиторий Git находился на уровне папки my_project, вы могли бы сделать...

base_folder="$(git rev-parse --show-toplevel)/app/webroot"

Это должно работать как на OS X, так и на Linux.


Установить путь для yuicompressor немного сложнее. Я бы порекомендовал, чтобы люди устанавливали его вручную при установке хука в своей локальной системе или (если yuicompressor находится в пути) использовать which.

person Amber    schedule 11.07.2012
comment
base_folder="$(git rev-parse --show-toplevel)/app/webroot" сработало! Благодарю вас! Что касается переменной yuicompressor_path, я устанавливаю для нее значение /Applications/yuicompressor.jar, если этот файл существует, в противном случае я устанавливаю для нее значение $(command -v yui-compressor) и удостоверяюсь, что вывод этой команды является допустимым файлом. - person Nick; 11.07.2012