Skip to content

Instantly share code, notes, and snippets.

@eploko
Created November 17, 2014 00:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eploko/bf21669439789c439f80 to your computer and use it in GitHub Desktop.
Save eploko/bf21669439789c439f80 to your computer and use it in GitHub Desktop.
Brocfile.js w/o comments
'use strict';
var _ = require('underscore');
var assetRev = require('broccoli-asset-rev');
var autoprefixer = require('broccoli-autoprefixer');
var browserify = require('broccoli-browserify');
var compileSass = require('broccoli-sass');
var csso = require('broccoli-csso');
var env = require('broccoli-env').getEnv();
var filterReact = require('broccoli-react');
var findBowerTrees = require('broccoli-bower');
var fs = require('fs');
var htmlmin = require('broccoli-htmlmin');
var imagemin = require('broccoli-imagemin');
var mergeTrees = require('broccoli-merge-trees');
var peg = require('broccoli-pegjs');
var pickFiles = require('broccoli-static-compiler');
var replace = require('broccoli-replace');
var sourceMap = require('broccoli-source-map');
var uglifyJs = require('broccoli-uglify-js');
var watchedTree = require('broccoli-watched-tree');
var appJs = pickFiles('src/js', { srcDir: '/', files: ['**/*.js', '**/*.jsx'], destDir: 'js' });
var compiledAppJs = filterReact(appJs);
var pegs = pickFiles('src/js', { srcDir: '/', files: ['**/*.pegjs'], destDir: 'js' });
var compiledPegs = peg(pegs);
var shimJs = pickFiles('src', { srcDir: '/shims', destDir: '/shims' });
var jqueryJs = pickFiles('src', { srcDir: '/vendor', files: ['jquery/dist/jquery.js'], destDir: '/vendor' });
var vendorJs = mergeTrees([shimJs, jqueryJs]);
vendorJs = browserify(vendorJs, {
entries: [
'./shims/es5-sham.js',
'./shims/es5-shim.js',
'./vendor/jquery/dist/jquery.js'
],
browserify: {
debug: (env == 'development' ? true : false)
},
outputFile: 'js/vendor.js'
});
compiledAppJs = mergeTrees([compiledAppJs, compiledPegs]);
var config = JSON.parse(fs.readFileSync('./config/' + env + '.json'));
compiledAppJs = replace(compiledAppJs, {
files: ['js/config.js'],
patterns: [{
json: config
}]
});
var nodeModules = watchedTree('node_modules');
compiledAppJs = mergeTrees([compiledAppJs, nodeModules]);
compiledAppJs = browserify(compiledAppJs, {
entries: [ './js/app.js' ],
browserify: {
debug: (env == 'development' ? true : false)
},
outputFile: 'js/app.js'
});
var js = mergeTrees([compiledAppJs, vendorJs]);
if (env != 'development') {
js = uglifyJs(js, { compress: true });
}
var appScss = pickFiles('src', { srcDir: '/css', destDir: '/css' });
var appHtml = pickFiles('src', { srcDir: '/', files: ['index.html'], destDir: '/' });
var bootstrapScss = pickFiles('src', {
srcDir: '/vendor/bootstrap-sass-official/assets/stylesheets',
destDir: '/vendor/bootstrap/bootstrap-sass-official/assets/stylesheets'
});
var scss = mergeTrees([appScss, bootstrapScss])
var css = compileSass([scss], 'css/app.scss', 'css/app.css', {
sourceMap: (env == 'development' ? true : false)
});
if (env == 'development') {
css = sourceMap.inline(css, { srcDir: '/css', destDir: '/css' });
}
css = autoprefixer(css, {
browsers: ['last 1 version']
});
if (env != 'development') {
css = csso(css);
}
var fonts = pickFiles('src', {
srcDir: '/vendor/bootstrap-sass-official/assets/fonts/bootstrap',
destDir: '/fonts'
});
var images = pickFiles('src/images', {
srcDir: '/',
files: ['**/*.svg', '**/*.png'],
destDir: '/images'
});
images = imagemin(images, {
interlaced: true,
optimizationLevel: 3,
progressive: true,
lossyPNG: false
});
appHtml = htmlmin(appHtml);
var result = mergeTrees([js, css, fonts, /*images,*/ appHtml]);
if (env != 'development') {
result = assetRev(result, {
extensions: ['js', 'css', 'png', 'jpg', 'gif', 'svg', 'eot', 'ttf', 'woff'],
replaceExtensions: ['html', 'js', 'css']
});
}
module.exports = result;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment