Last active
March 28, 2018 12:55
-
-
Save lox/8910898 to your computer and use it in GitHub Desktop.
Replaced Grunt/Gulp with a Makefile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SASSC = sass --style compact | |
COMPSDIR = resources/assets/components | |
SASSDIR = resources/assets/css | |
JSDIR = resources/assets/js | |
DISTDIR = web/dist | |
CSSDIR = $(DISTDIR)/css | |
SASSINC = $(SASSDIR) \ | |
$(COMPSDIR)/asimov/src/scss \ | |
$(COMPSDIR)/asimov-contests/src/scss \ | |
$(COMPSDIR)/asimovicons/src/scss | |
MANIFEST = $(DISTDIR)/.manifest | |
JSBINS = node_modules/.bin | |
PHPBINS = vendor/bin | |
LRURL = http://localhost:35729/changed | |
JSFILES = $(wildcard $(JSDIR)/bundles/*.js) | |
SASSFILES = $(shell find $(SASSDIR) -name '*.scss' | grep -v '/_') | |
# default target | |
all: build | |
# build all front-end assets | |
build: sass requirejs manifest | |
# run tests | |
test: test-js test-php | |
test-js: | |
$(JSBINS)/karma start config/karma.conf.js --single-run | |
test-php: | |
$(PHPBINS)/phpunit --stop-on-error --stop-on-failure | |
# compile a .manifest of all front-end assets | |
manifest: | |
find $(DISTDIR) -type f -exec cksum {} \; | sed -e "s#$(DISTDIR)/##" | cut -f1,3 -d" " >$(MANIFEST) | |
# compile sass files ito dist css files | |
sass: $(patsubst $(SASSDIR)/%.scss, $(CSSDIR)/%.css, $(SASSFILES)) | |
# compile sass with the native sass --update syntax | |
sassupdate: | |
$(SASSC) -C $(foreach d, $(SASSINC), -I$d) --update $(SASSDIR):$(CSSDIR) | |
$(DISTDIR)/css/%.css: $(SASSDIR)/%.scss | |
@echo compiling $@ | |
@mkdir -p $(shell dirname $@) | |
@$(SASSC) -C $(foreach d, $(SASSINC), -I$d) $? $@ | |
# build production js with requirejs | |
requirejs: $(patsubst $(JSDIR)/%, $(DISTDIR)/js/%, $(JSFILES)) | |
$(DISTDIR)/js/bundles/%.js: $(JSDIR)/bundles/%.js | |
$(JSBINS)/r.js -o $(JSDIR)/build.js include=$(patsubst $(DISTDIR)/js/%.js,%,$@) out=$@ | |
# watch assets for changes in development | |
watch: | |
$(JSBINS)/livereload $(DISTDIR) & | |
$(JSBINS)/wach -o "$(DISTDIR)/**/*" make manifest & | |
$(SASSC) $(foreach d, $(SASSINC), -I$d) --watch $(SASSDIR):$(CSSDIR) | |
# set up the tool chain | |
setup-toolchain: | |
@gem list bundler >/dev/null || { gem install bundler --no-rdoc --no-ri; } | |
bundle install | |
npm install | |
composer install --dev --no-interaction | |
$(JSBINS)/bower install --allow-root | |
# clean up only js directory | |
clean-js: | |
-rm -rf $(DISTDIR)/js | |
# delete npm modules, composer vendors and bower components | |
clean-toolchain: | |
-rm -rf node_modules | |
-rm -rf composer_dev | |
-rm -rf resources/assets/components | |
# clean up dist directory | |
clean: | |
-rm -rf $(DISTDIR) | |
-rm -rf .sass-cache | |
# these are targets that don't produce a file of the same name | |
.PHONY: all clean clean-js clean-toolchain watch sass requirejs manifest test test-php test-js build setup-toolchain |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Nicely done 👍
I always loved the simplicity of Makefiles, and their incremental builds