75 lines
1.7 KiB
Bash
Executable file
75 lines
1.7 KiB
Bash
Executable file
#!/bin/bash
|
||
#
|
||
# A development tool that use yuicompressor to compress JS files.
|
||
#
|
||
#
|
||
# Requirement:
|
||
# - wget
|
||
# - JRE
|
||
# - yuicompressor › https://github.com/yui/yuicompressor
|
||
#
|
||
#
|
||
# Usage: bash /path/to/js-compress.sh
|
||
#
|
||
# Process:
|
||
# input: /path/to/js/source.js --> output: /path/to/js/dist/source.min.js
|
||
#
|
||
# v2.0
|
||
# https://github.com/cotes2020/jekyll-theme-chirpy
|
||
# © 2020 Cotes Chung
|
||
# MIT Licensed
|
||
|
||
|
||
set -eu
|
||
|
||
PROJ_HOME=$(dirname $(dirname $(realpath "$0")))
|
||
|
||
YUICOMPRESSOR_SRC=https://github.com/yui/yuicompressor/releases/download/v2.4.8/yuicompressor-2.4.8.jar
|
||
YUICOMPRESSOR=${PROJ_HOME}/tools/package/yuicompressor-2.4.8.jar
|
||
JS_ROOT=${PROJ_HOME}/assets/js/
|
||
JS_SRC=${JS_ROOT}_src # JS source files
|
||
JS_DEST=${JS_ROOT}dist # Compressed output directory
|
||
PREFIX_LEN=${#JS_ROOT} # To beautify the log
|
||
|
||
|
||
function init() {
|
||
if [[ ! -f $YUICOMPRESSOR ]]; then
|
||
if [[ ! -d "${PROJ_HOME}/tools/package/" ]]; then
|
||
mkdir -p "${PROJ_HOME}/tools/package/"
|
||
fi
|
||
wget "$YUICOMPRESSOR_SRC" -P "${PROJ_HOME}/tools/package/" -q
|
||
fi
|
||
}
|
||
|
||
function compress() {
|
||
# $1 is the source dir
|
||
# $2 is the destination dir
|
||
# $3 is the sub dir of source dir, nullable
|
||
if [[ -z ${3:+unset} ]]
|
||
then
|
||
sub_dir=""
|
||
else
|
||
sub_dir="$3/"
|
||
fi
|
||
|
||
for item in $(ls $1)
|
||
do
|
||
src="$1/$item"
|
||
if [[ -d "$src" ]]; then
|
||
compress $src $2 $item # recursion
|
||
else
|
||
if [[ ! -d "$2/${sub_dir}" ]]; then
|
||
mkdir -p $2/${sub_dir}
|
||
fi
|
||
output=$2/${sub_dir}${item%.*}.min.js
|
||
echo "java -jar $(basename $YUICOMPRESSOR) ${src:$PREFIX_LEN} -o ${output:$PREFIX_LEN}"
|
||
java -jar $YUICOMPRESSOR $src -o $output
|
||
fi
|
||
done
|
||
|
||
sub_dir="" # clean up for next recursion.
|
||
}
|
||
|
||
init
|
||
|
||
compress $JS_SRC $JS_DEST
|