JSX = ./node_modules/react-tools/bin/jsx UGLIFY = ./node_modules/uglify-js/bin/uglifyjs CLEANCSS = ./node_modules/clean-css/bin/cleancss cloc: cloc . --exclude-dir=node_modules,app/bower_components,app/jsx/build/.module_cache dist: # Compiling JSX mkdir -p build rm -rf app/jsx/build $(JSX) --extension jsx app/jsx app/jsx/build # Compressing JS # # Get all script tags # Ignore Bower deps, include minified versions later # Splitting string by " and taking second field (URI) # Adding "app" prefix # Prepending dependencies to the list # Concatenation # Minification cat app/index.html \ | grep script \ | grep -v bower \ | cut -d '"' -f 2 \ | sed -e 's/^/app/' \ | ( echo app/bower_components/react/react.min.js && \ echo app/bower_components/react-router/build/global/ReactRouter.min.js && \ echo app/bower_components/lodash/lodash.min.js && \ cat ) \ | xargs cat \ | $(UGLIFY) > build/app.js # Compressing CSS # # Get all style tags # Ignore local Open Sans stylesheet # Splitting string by " and taking fourth field (URI) # Adding "app" prefix # Concatenation # Minification cat app/index.html \ | grep stylesheet \ | grep -v opensans \ | cut -d '"' -f 4 \ | sed -e 's/^/app/' \ | xargs cat \ | $(CLEANCSS) -o build/app.css # Replacing all link tags with a single one # Replacing all script tags with a single one cat app/index.html \ | perl -pe 's/\n/STYLE_TAG/g' \ | perl -pe 's/(STYLE_TAG\s*)+/\ \n \ \n /g' \ | perl -pe 's/\n/SCRIPT_TAG/g' \ | perl -pe 's/(SCRIPT_TAG\s*)+/\