我想使我的網站儘可能高效,其中一部分是縮小我的CSS和JavaScript文件。我的目標是能夠在開發過程中使用unminified文件,但在生產中使用縮小文件。所以我的想法是讓我的未命名的文件名是正常的(foo.css)和我縮小的文件名是相同的,只有在開始時用下劃線(_foo.css)。YUI Compressor的Bash腳本與Git一起使用
由於開發環境不使用縮小文件,我不必擔心保持縮小的文件是最新的。他們唯一應該生成的時候是我提交到網站的Git存儲庫。所以把它變成Git鉤子是有道理的,這是我以前從未做過的事情。我希望這個鉤子也適合我的同事。我在Mac上,他們在Linux上。我有一個可用的shell腳本,但是有兩件事需要修改,以便它可以用作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鉤子爲我們所有人工作。我能否以適合我們所有人的方式設置變量?
謝謝!
'base_folder =「$(git rev-parse --show-toplevel)/ app/webroot」'工作!謝謝!至於'yuicompressor_path'變量,如果該文件存在,我將它設置爲'/ Applications/yuicompressor.jar',否則我將它設置爲'$(command -v yui-compressor)',並確保該命令的輸出是一個有效的文件。 – Nick 2012-07-11 19:54:03