我想让我的网站尽可能高效,其中一部分是缩小我的 CSS 和 JavaScript 文件。我的目标是能够在开发中使用未缩小的文件,但在生产中使用缩小的文件。所以我的想法是让我的未缩小文件名正常(foo.css)并且我的缩小文件名相同,只是开头有一个下划线(_foo.css)。
由于开发环境不使用压缩文件,我不必担心保持压缩文件是最新的。唯一应该生成它们的时间是当我提交到网站的 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 挂钩对我们所有人都有效。我可以以适合我们所有人的方式设置该变量吗?
谢谢!