Our setup details below. Our Brocfile.js is quite custom so there might be an issue with something there. ``` app: 373 files, 1.4MB total bower_components: 1075 files, 14MB total node_modules: 39 000 files, 184MB vendor: 10 files, 193KB ``` **package.json** ``` { "name": "x", "version": "0.0.0", "private": true, "directories": { "doc": "doc", "test": "test" }, "scripts": { "start": "ember server", "install": "bower install --config.interactive=false", "build": "ember build", "build-deployment": "ember build --environment=production", "test": "ember test --environment=test" }, "repository": "https://github.com/stefanpenner/ember-cli", "engines": { "node": ">= 0.10.5" }, "author": "", "license": "MIT", "devDependencies": { "broccoli-asset-rev": "^2.0.0", "broccoli-ember-hbs-template-compiler": "^1.7.0", "ember-cli": "0.1.5", "ember-cli-content-security-policy": "0.3.0", "ember-cli-dependency-checker": "0.0.7", "ember-cli-inject-live-reload": "^1.3.0", "ember-cli-qunit": "0.1.2", "ember-data": "1.0.0-beta.11", "express": "^4.10.2", "glob": "^4.0.6", "body-parser": "^1.9.2", "bower": "^1.3.12", "broccoli-autoprefixer": "^1.1.0", "broccoli-file-creator": "^0.1.0", "broccoli-gzip": "^0.2.0", "broccoli-merge-trees": "^0.2.1", "broccoli-sass": "^0.3.3", "broccoli-static-compiler": "^0.2.1", "connect-restreamer": "^1.0.1", "dotenv": "^0.4.0", "ember-cli-pagination": "^0.5.2", "http-proxy": "^1.6.2", "originate": "0.1.5", "phantomjs": "^1.9.12", "qd-ajax": "git://github.com/hooktstudios/qd-ajax.git#master" } } ``` **bower.json** ``` { "name": "x", "dependencies": { "ember": "1.7.1", "ember-cli-shims": "stefanpenner/ember-cli-shims#0.0.3", "ember-cli-test-loader": "rjackson/ember-cli-test-loader#0.0.4", "ember-data": "v1.0.0-beta.11", "ember-easyForm": "http://builds.dockyard.com.s3.amazonaws.com/ember-easyForm/release/daily/20140207/ember-easyForm.js", "ember-flash-message": "https://raw.githubusercontent.com/ryanto/ember-flash-message/308adc8288844eb918b869d3adae6f1d1b913260/flash-message.js", "ember-i18n": "jamesarosen/ember-i18n#52a3b55ac95aa79b8810cca05588ed5638bae299", "ember-load-initializers": "stefanpenner/ember-load-initializers#0.0.2", "ember-qunit": "~0.1.8", "ember-qunit-notifications": "0.0.4", "ember-resolver": "~0.1.11", "handlebars": "~1.3.0", "html5shiv": "~3.7.2", "ic-ajax": "~2.0.1", "jquery": "^1.11.1", "jquery-file-upload": "~9.7.0", "loader.js": "stefanpenner/loader.js#1.0.1", "mediaelement": "~2.16.1", "moment": "~2.8.3", "normalize-scss": "~3.0.1", "numeral": "~1.5.3", "qunit": "~1.15.0", "rangy-official": "~1.3.0-alpha.20140827", "route-recognizer": "~0.1.1", "video.js": "~4.11.3", "videojs-vimeo": "eXon/videojs-vimeo#54f88a4de0e24ef77c1a8287462db64e2f6f6147", "videojs-youtube": "~1.2.7" }, "resolutions": { "video.js": "~4.11.3", "route-recognizer": "~0.1.1" } } ``` **Brocfile.js** ``` /* global require, module */ var glob = require('glob'); var path = require('path'); var mergeTrees = require('broccoli-merge-trees'); var compileSass = require('broccoli-sass'); var assetRev = require('broccoli-asset-rev'); var pickFiles = require('broccoli-static-compiler'); var autoprefixer = require('broccoli-autoprefixer'); var gzip = require('broccoli-gzip'); var writeFile = require('broccoli-file-creator'); var appDotEnv = require('./config/app-dotenv'); var EmberApp = require('ember-cli/lib/broccoli/ember-app'); var app = new EmberApp({ name: require('./package.json').name, // Disabled here to avoid double fingerprints fingerprint: { enabled: false }, vendorFiles: { polyfills: 'vendor/polyfills.js' }, sourcemaps: { enabled: false, extensions: [] } }); app.import('vendor/raven.js'); app.import({ development: 'bower_components/ember-data/ember-data.js', production: 'bower_components/ember-data/ember-data.prod.js' }); app.import({ development: 'bower_components/moment/min/moment-with-locales.js', production: 'bower_components/moment/min/moment-with-locales.min.js' }); app.import({ development: 'bower_components/video.js/dist/video-js/video-js.css', production: 'bower_components/video.js/dist/video-js/video-js.min.css' }) app.import({ development: 'bower_components/video.js/dist/video-js/video.dev.js', production: 'bower_components/video.js/dist/video-js/video.js' }); app.import({ development: 'bower_components/videojs-youtube/src/youtube.js', production: 'bower_components/videojs-youtube/dist/vjs.youtube.js' }) app.import({ development: 'bower_components/videojs-vimeo/src/media.vimeo.js', production: 'bower_components/videojs-vimeo/vjs.vimeo.js' }) app.import('bower_components/ember-i18n/lib/i18n.js'); app.import('bower_components/jquery-file-upload/js/vendor/jquery.ui.widget.js'); app.import('bower_components/jquery-file-upload/js/jquery.iframe-transport.js'); app.import('bower_components/jquery-file-upload/js/jquery.fileupload.js'); app.import('vendor/transloadit.js'); app.import('vendor/transloadit.fr.js'); app.import('vendor/jquery.payment.js'); app.import('vendor/jquery.number.js'); app.import('vendor/ios-drag-drop.js'); app.import('bower_components/ember-flash-message/index.js'); app.import('bower_components/ember-easyForm/index.js'); app.import('bower_components/numeral/numeral.js'); app.import({ development: 'bower_components/rangy-official/rangy-core.js', production: 'bower_components/rangy-official/rangy-core.min.js' }); // Use `app.import` to add additional libraries to the generated // output files. // // If you need to use different assets in different // environments, specify an object as the first parameter. That // object's keys should be the environment name and the values // should be the asset to use in that environment. // // If the library that you are including contains AMD or ES6 // modules that you would like to import into your application // please specify an object with the list of modules as keys // along with the exports of each module as its value. // Add clients custom styles var clientTrees = glob.sync('clients/**/styles.scss').map(function(file) { var dirname = path.dirname(file), clientName = dirname.split('/').pop(), options = {}, tree; if (app.env === 'production') options = { outputStyle: 'compressed' }; tree = compileSass([dirname], 'styles.scss', 'assets/' + clientName + '.css', options); return tree; }); var videojsAssets = pickFiles('bower_components/video.js/dist/video-js', { srcDir: '/', files: ['font/vjs.*', 'video-js.swf'], destDir: '/assets' }); var fonts = pickFiles('app/fonts', { srcDir: '/', destDir: '/assets' }); var singleVendors = pickFiles('vendor', { srcDir: '/', files: ['es5-shim.js', 'backend.js'], destDir: '/assets' }) var html5shiv = pickFiles('bower_components/html5shiv/dist', { srcDir: '/', files: ['html5shiv.js'], destDir: '/assets' }) var tree = mergeTrees(clientTrees.concat(app.toTree(), videojsAssets, fonts, singleVendors, html5shiv)); // Add fingerprints & gziping if (app.env === 'production') { var options = { generateRailsManifest: true, extensions: ['js', 'css', 'png', 'jpg', 'gif', 'eot', 'svg', 'ttf', 'woff'], replaceExtensions: ['html', 'js', 'css', 'hbs'] }; // Temporary fix for broccoli-asset-rev#18 & videojs vendor options.exclude = [ 'vjs.eot', 'vjs.svg', 'vjs.ttf', 'vjs.woff', 'video-js.swf' ]; if(appDotEnv.ASSET_HOST){ options.prepend = 'https://' + appDotEnv.ASSET_HOST + '/'; } tree = assetRev(tree, options); gzipOptions = { extensions: ['js', 'css', 'svg'], keepUncompressed: true } tree = gzip(tree, gzipOptions) } tree = autoprefixer(tree); // Robots.txt var robotsSrc = 'User-agent: *'; if(appDotEnv.ROBOTS_DISALLOW === 'true') { robotsSrc += '\nDisallow: /'; } else { robotsSrc += '\nAllow: /'; } var robots = writeFile('/robots.txt', robotsSrc); tree = mergeTrees([tree, robots]); module.exports = tree; ```