0

ウェブサイトをできるだけ効率的にしたいと思っています。その一環として、CSSファイルとJavaScriptファイルを縮小しています。私の目標は、縮小されていないファイルを開発で使用できるようにすることですが、縮小されたファイルは本番環境で使用できるようにすることです。したがって、私の考えでは、縮小されていないファイル名は通常(foo.css)であり、縮小されたファイル名は同じで、先頭にアンダースコア(_foo.css)が付いているだけです。

開発環境では縮小ファイルを使用しないため、縮小ファイルを最新の状態に保つことを心配する必要はありません。それらが生成されるのは、WebサイトのGitリポジトリにコミットするときだけです。したがって、Gitフックにするのは理にかなっています。これは私がこれまでに行ったことのないことです。このフックを同僚にも配置したいと思います。私はMacを使用していて、Linuxを使用しています。シェルスクリプトは機能していますが、Gitフックとして使用したり、同僚が使用したりするには、変更が必要なことが2つあります。これらの2つのことは私が助けを必要としているものです。しかし、最初に、コード:

#!/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フックが私たち全員のために機能することを望んでいます。私たち全員にとってうまくいく方法でその変数を設定できますか?

ありがとうございました!

4

1 に答える 1

0

Gitリポジトリのパスに基づいて可変コンテンツを構築できます。

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

base_folderGitリポジトリのトップレベルへのパスと同じに設定されます。サブパスに設定する必要がある場合は、後で追加するだけです。たとえば、Gitリポジトリがmy_projectフォルダーレベルの場合は、次のようにします...

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

これは、OSXとLinuxの両方で機能するはずです。


のパスを設定するのyuicompressorは少し注意が必要です。私がお勧めするのは、ローカルシステムにフックをインストールするときに手動で設定するか、(yuicompressorがパスにある場合)を使用することwhichです。

于 2012-07-11T04:18:10.063 に答える