-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathMakefile
125 lines (107 loc) · 2.79 KB
/
Makefile
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
BIN = ./node_modules/.bin
DIST = ./dist
SRC = ./src
HTML_INPUT = $(SRC)/index.html
HTML_OUTPUT = $(DIST)/index.html
CSS_INPUT_DIR = $(SRC)/stylesheets
CSS_INPUT = $(CSS_INPUT_DIR)/style.css
CSS_OUTPUT_MIN_DIR = $(DIST)
CSS_OUTPUT_MIN = $(CSS_OUTPUT_MIN_DIR)/style.min.css
JS_INPUT_DIR = $(SRC)/scripts
JS_INPUT = $(JS_INPUT_DIR)/app.js
JS_OUTPUT = $(DIST)/all.js
JS_OUTPUT_MIN = $(DIST)/all.min.js
PROD_CSS_PATH = style.min.css
PROD_JS_PATH = all.min.js
all: clean copy_static html js
@echo "Finished $@. `date`"
@make watch & \
$(BIN)/nodemon \
--ignore $(SRC) \
--ignore $(DIST) \
server.js dev
_release: clean copy_static post_html post_css post_js
@echo "Finished $@. `date`" & node server.js prod
release:
@NODE_ENV=production make _release
clean:
@echo "Cleaning..."
@rm -rf $(DIST)
@mkdir $(DIST)
watch:
@make watch_js & $(BIN)/livereload "$(DIST), $(CSS_INPUT_DIR)"
html:
@make replace_path \
SCRIPT_FILE=$(JS_OUTPUT) \
STYLE_FILE=$(CSS_INPUT) \
LIVE_RELOAD='true'
post_html:
@make replace_path \
SCRIPT_FILE=$(PROD_JS_PATH) \
STYLE_FILE=$(PROD_CSS_PATH) \
LIVE_RELOAD='false'
@echo "Minifying markup..."
@$(BIN)/html-minifier \
--collapse-whitespace \
--remove-attribute-quotes \
--remove-comments \
--remove-empty-attributes \
--remove-redundant-attributes \
--output $(DIST)/tmp.index.html \
$(HTML_OUTPUT)
@mv $(DIST)/tmp.index.html $(HTML_OUTPUT)
post_css:
@echo "PostCSS..."
@$(BIN)/postcss \
--use autoprefixer \
--use postcss-import \
--local-plugins \
--output $(DIST)/tmp.style.css \
$(CSS_INPUT)
@echo "Minifying stylesheets..."
@$(BIN)/cssnano $(DIST)/tmp.style.css $(CSS_OUTPUT_MIN)
@rm $(DIST)/tmp.style.css
js:
@echo "Browserify..."
@$(BIN)/browserify \
--delay=100 \
--verbose \
--transform [ babelify --presets [ es2015 react ] ] \
--outfile $(JS_OUTPUT) \
--debug \
$(JS_INPUT)
watch_js:
@echo "Started watching JS..."
@$(BIN)/watchify \
--delay=100 \
--verbose \
--transform [ babelify --presets [ es2015 react ] ] \
--outfile $(JS_OUTPUT) \
--debug \
$(JS_INPUT)
post_js: js
@echo "Minifying scripts..."
@$(BIN)/uglifyjs $(JS_OUTPUT) \
--mangle \
--compress \
--output $(JS_OUTPUT_MIN)
@rm $(JS_OUTPUT)
copy_static:
@echo "Copying static files..."
@mkdir -p $(DIST)/fonts
@mkdir -p $(DIST)/images
@cp -r $(SRC)/fonts/ $(DIST)/fonts
@cp -r $(SRC)/images/ $(DIST)/images
replace_path:
@echo "Updating markup..."
@$(BIN)/handlebars $(HTML_INPUT) -f $(DIST)/tmp.index.hbs.js
@node -p " \
var Handlebars = require('handlebars'); \
var template = require('./$(DIST)/tmp.index.hbs.js'); \
Handlebars.templates['index.html']({ \
SCRIPT_FILE: '$(SCRIPT_FILE)', \
STYLE_FILE: '$(STYLE_FILE)', \
LIVE_RELOAD: $(LIVE_RELOAD) \
}) \
" > $(HTML_OUTPUT)
@rm $(DIST)/tmp.index.hbs.js