Skip to content

Instantly share code, notes, and snippets.

@j15e
Created January 13, 2015 19:51
Show Gist options
  • Select an option

  • Save j15e/83275f0e91c24bf3f711 to your computer and use it in GitHub Desktop.

Select an option

Save j15e/83275f0e91c24bf3f711 to your computer and use it in GitHub Desktop.

Revisions

  1. j15e renamed this gist Jan 13, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. j15e created this gist Jan 13, 2015.
    275 changes: 275 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,275 @@

    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;
    ```