-
Notifications
You must be signed in to change notification settings - Fork 0
/
build
executable file
·105 lines (86 loc) · 2.38 KB
/
build
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env bash
#
# Usage: [optimize_html=0*|1] [optimize_css=0*|1] [optimize_js=0*|1|2|3] [compress=0*|1] build
#
set -euo pipefail
optimize_html="${optimize_html:-0}"
optimize_css="${optimize_css:-0}"
optimize_js="${optimize_js:-0}"
compress="${compress:-0}"
src="${project:?}"
out="${build:?}/application"
clean () {
rm -rf "$out"
}
prepare () {
mkdir -p "$out"
}
build_images () {
cp -r "$src/images" "$out/images"
}
build_html () {
if [[ "$optimize_html" = 0 ]]; then
cp "$src/html/"*.html "$out"
else
html-minifier \
--collapse-boolean-attributes \
--collapse-inline-tag-whitespace \
--collapse-whitespace \
--decode-entities \
--minify-js \
--remove-comments \
--remove-empty-attributes \
--remove-redundant-attributes \
--remove-script-type-attributes \
--remove-style-link-type-attributes \
--remove-tag-whitespace \
--file-ext html \
--input-dir "$src/html" \
--output-dir "$out"
fi
}
build_css () {
if [[ "$optimize_css" = 0 ]]; then
sass --embed-sources "$src/sass/index.scss" "$out/index.css"
else
sass --style=compressed --no-source-map "$src/sass/index.scss" "$out/index.css"
fi
}
build_js () {
case "${optimize_js}" in
1|2|3)
func=build_js_optimize_"$optimize_js"
;;
*)
func=build_js_debug
;;
esac
"$func" "$src/src/Main.elm" "$out/app.js"
}
build_js_debug () {
elm make "$1" --debug --output "$2"
}
build_js_optimize_1 () {
elm make "$1" --optimize --output "$2"
minify "$2"
}
build_js_optimize_2 () {
elm-optimize-level-2 "$1" --output "$2"
minify "$2"
}
build_js_optimize_3 () {
elm-optimize-level-2 "$1" --optimize-speed --output "$2"
minify "$2"
}
minify () {
js="$1"
min="${js%.js}.min.js"
terser "$js" --compress 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe' | terser --mangle --output "$min"
mv "$min" "$js"
}
compress_assets () {
if [[ "$compress" != 0 ]]; then
cd "$out" && find . \( -name *.html -o -name *.css -o -name *.js \) -exec brotli "{}" \; -exec zopfli "{}" \;
fi
}
clean && prepare && build_images && build_html && build_css && build_js && compress_assets