Last active
December 22, 2015 21:08
-
-
Save aearly/6530898 to your computer and use it in GitHub Desktop.
Yeoman modified for CommonJS/Browserify
This file contains hidden or 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
| "use strict"; | |
| var LIVERELOAD_PORT = 35729; | |
| var lrSnippet = require("connect-livereload")({port: LIVERELOAD_PORT}); | |
| var mountFolder = function (connect, dir) { | |
| return connect.static(require("path").resolve(dir)); | |
| }; | |
| // # Globbing | |
| // for performance reasons we"re only matching one level down: | |
| // "test/spec/{,*/}*.js" | |
| // use this if you want to match all subfolders: | |
| // "test/spec/**/*.js" | |
| // templateFramework: "lodash" | |
| module.exports = function (grunt) { | |
| // load all grunt tasks | |
| require("matchdep").filterDev("grunt-*").forEach(grunt.loadNpmTasks); | |
| // configurable paths | |
| var yeomanConfig = { | |
| app: "app", | |
| dist: "dist" | |
| }; | |
| grunt.initConfig({ | |
| yeoman: yeomanConfig, | |
| watch: { | |
| options: { | |
| nospawn: true, | |
| livereload: true | |
| }, | |
| compass: { | |
| files: ["<%= yeoman.app %>/styles/{,*/}*.{scss,sass}"], | |
| tasks: ["compass:server", "autoprefixer" ] | |
| }, | |
| styles: { | |
| files: ["<%= yeoman.app %>/styles/{,*/}*.css"], | |
| tasks: ["copy:styles", "autoprefixer"] | |
| }, | |
| images: { | |
| files: ["<%= yeoman.app %>/images/{,*/}*"], | |
| tasks: ["copy:styles", "autoprefixer"] | |
| }, | |
| scripts: { | |
| files: [ | |
| "<%= yeoman.app %>/scripts/{,*/}*.js", | |
| "!<%= yeoman.app %>/scripts/*.browserify.js", | |
| "!<%= yeoman.app %>/scripts/vendor/**", | |
| "<%= yeoman.app %>/scripts/templates/{,*/}*.hbs" | |
| ], | |
| tasks: ["browserify:dist", "concat"] | |
| }, | |
| vendor: { | |
| files: [ | |
| "<%= yeoman.app %>/scripts/vendor/**", | |
| "<%= yeoman.app %>/bower_components/**" | |
| ], | |
| tasks: ["browserify", "concat"] | |
| }, | |
| livereload: { | |
| options: { | |
| livereload: LIVERELOAD_PORT | |
| }, | |
| files: [ | |
| "<%= yeoman.app %>/*.html", | |
| "{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css", | |
| "{.tmp,<%= yeoman.app %>}/scripts/main.browserify.js", | |
| "<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}" | |
| ] | |
| } | |
| }, | |
| connect: { | |
| options: { | |
| port: 9000, | |
| // change this to "0.0.0.0" to access the server from outside | |
| hostname: "localhost" | |
| }, | |
| livereload: { | |
| options: { | |
| middleware: function (connect) { | |
| return [ | |
| lrSnippet, | |
| mountFolder(connect, ".tmp"), | |
| mountFolder(connect, yeomanConfig.app) | |
| ]; | |
| } | |
| } | |
| }, | |
| test: { | |
| options: { | |
| middleware: function (connect) { | |
| return [ | |
| mountFolder(connect, ".tmp"), | |
| mountFolder(connect, "test"), | |
| mountFolder(connect, yeomanConfig.app) | |
| ]; | |
| } | |
| } | |
| }, | |
| dist: { | |
| options: { | |
| middleware: function (connect) { | |
| return [ | |
| mountFolder(connect, yeomanConfig.dist) | |
| ]; | |
| } | |
| } | |
| } | |
| }, | |
| open: { | |
| server: { | |
| path: "http://localhost:<%= connect.options.port %>" | |
| } | |
| }, | |
| clean: { | |
| dist: [".tmp", "<%= yeoman.dist %>/*"], | |
| server: ".tmp" | |
| }, | |
| jshint: { | |
| options: { | |
| jshintrc: ".jshintrc" | |
| }, | |
| all: [ | |
| "Gruntfile.js", | |
| "<%= yeoman.app %>/scripts/{,*/}*.js", | |
| "!<%= yeoman.app %>/scripts/*.browserify.js", | |
| "!<%= yeoman.app %>/scripts/vendor/*", | |
| "test/spec/{,*/}*.js" | |
| ] | |
| }, | |
| mocha: { | |
| all: { | |
| options: { | |
| run: true, | |
| urls: ["http://localhost:<%= connect.options.port %>/index.html"] | |
| } | |
| } | |
| }, | |
| compass: { | |
| options: { | |
| sassDir: "<%= yeoman.app %>/styles", | |
| cssDir: ".tmp/styles", | |
| imagesDir: "<%= yeoman.app %>/images", | |
| javascriptsDir: "<%= yeoman.app %>/scripts", | |
| fontsDir: "<%= yeoman.app %>/styles/fonts", | |
| importPath: "<%= yeoman.app %>/bower_components", | |
| relativeAssets: true | |
| }, | |
| dist: {}, | |
| server: { | |
| options: { | |
| debugInfo: true | |
| } | |
| } | |
| }, | |
| autoprefixer: { | |
| options: { | |
| browsers: ["last 1 version"] | |
| }, | |
| dist: { | |
| files: [{ | |
| expand: true, | |
| cwd: ".tmp/styles/", | |
| src: "{,*/}*.css", | |
| dest: ".tmp/styles/" | |
| }] | |
| } | |
| }, | |
| // not used since Uglify task does concat, | |
| // but still available if needed | |
| /*concat: { | |
| dist: {} | |
| },*/ | |
| browserify: { | |
| vendor: { | |
| files: { | |
| "app/scripts/vendor.browserify.js": ["app/scripts/vendor/no_conflict.js"] | |
| }, | |
| options: { | |
| shim: { | |
| jquery: {path: "app/bower_components/jquery/jquery.js", exports: "$"}, | |
| chart: {path: "app/scripts/vendor/chart.js", exports: "Chart"}, | |
| backbone: { | |
| path: "app/bower_components/backbone/backbone", | |
| exports: "Backbone", | |
| depends: { | |
| underscore: "_", | |
| jquery: "jQuery" | |
| } | |
| }, | |
| marionette: { | |
| path: "app/scripts/vendor/backbone.marionette", | |
| exports: "Marionette", | |
| depends: { | |
| underscore: "_", | |
| backbone: "Backbone" | |
| } | |
| }, | |
| bootstrap: { | |
| path: "app/scripts/vendor/bootstrap", | |
| depends: {jquery: "jQuery"}, | |
| exports: null | |
| }, | |
| "bootstrap-lightbox": { | |
| path: "app/scripts/vendor/bootstrap-lightbox", | |
| depends: {jquery: "jQuery"}, | |
| exports: null | |
| }, | |
| "bootstrap-datepicker": { | |
| path: "app/bower_components/bootstrap-datepicker/js/bootstrap-datepicker", | |
| depends: {jquery: "jQuery"}, | |
| exports: null | |
| }, | |
| pagination: { | |
| path: "app/scripts/vendor/jquery.simplePagination.js", | |
| depends: {jquery: "jQuery"}, | |
| exports: null | |
| }, | |
| classyCompare: { | |
| path: "app/scripts/vendor/jquery.classycompare.js", | |
| depends: {jquery: "jQuery"}, | |
| exports: null | |
| } | |
| } | |
| } | |
| }, | |
| dist: { | |
| files: { | |
| "app/scripts/app.browserify.js": ["app/scripts/app.js"] | |
| }, | |
| options: { | |
| transform: ["brfs"], // so we can load mustache templates from the file system | |
| external: [ | |
| "jquery", | |
| "chart", | |
| "backbone", | |
| "marionette", | |
| "bootstrap", | |
| "bootstrap-datepicker", | |
| "bootstrap-lightbox", | |
| "pagination", | |
| "classyCompare" | |
| ] | |
| } | |
| } | |
| }, | |
| concat: { | |
| main: { | |
| src: ["app/scripts/vendor.browserify.js", "app/scripts/app.browserify.js"], | |
| dest: "app/scripts/main.browserify.js", | |
| options: { | |
| banner: "(function(){var oldRequire = window.require, oldWindow = Object.keys(window);", | |
| footer: "window.require = oldRequire; console.log('global leaks:'); Object.keys(window).forEach(function (key) {" + | |
| " !~oldWindow.indexOf(key) && console.log(key); })}());" | |
| } | |
| } | |
| }, | |
| useminPrepare: { | |
| html: "<%= yeoman.app %>/index.html", | |
| options: { | |
| dest: "<%= yeoman.dist %>" | |
| } | |
| }, | |
| usemin: { | |
| html: ["<%= yeoman.dist %>/*.html"], | |
| css: ["<%= yeoman.dist %>/styles/{,*/}*.css"], | |
| options: { | |
| dirs: ["<%= yeoman.dist %>"] | |
| } | |
| }, | |
| rev: { | |
| dist: { | |
| files: { | |
| src: [ | |
| "<%= yeoman.dist %>/scripts/{,*/}*.js", | |
| "<%= yeoman.dist %>/styles/{,*/}*.css", | |
| "<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}", | |
| "<%= yeoman.dist %>/styles/fonts/*" | |
| ] | |
| } | |
| } | |
| }, | |
| cssmin: { | |
| dist: { | |
| files: { | |
| "<%= yeoman.dist %>/styles/main.css": [ | |
| ".tmp/styles/{,*/}*.css", | |
| "<%= yeoman.app %>/styles/{,*/}*.css" | |
| ] | |
| } | |
| } | |
| }, | |
| // Put files not handled in other tasks here | |
| copy: { | |
| dist: { | |
| files: [{ | |
| expand: true, | |
| dot: true, | |
| cwd: "<%= yeoman.app %>", | |
| dest: "<%= yeoman.dist %>", | |
| src: [ | |
| "*.{ico,png,txt}", | |
| ".htaccess", | |
| "images/**", | |
| "styles/fonts/*", | |
| "index.html" | |
| ] | |
| }, { | |
| expand: true, | |
| cwd: ".tmp/images", | |
| dest: "<%= yeoman.dist %>/images", | |
| src: [ | |
| "generated/*" | |
| ] | |
| }, { | |
| expand: true, | |
| cwd: "<%= yeoman.app %>/bower_components/sass-bootstrap/fonts/", | |
| src: "*", | |
| dest: "<%= yeoman.dist %>/styles/fonts" | |
| }] | |
| }, | |
| styles: { | |
| files: [{ | |
| expand: true, | |
| dot: true, | |
| cwd: "<%= yeoman.app %>/styles", | |
| dest: ".tmp/styles/", | |
| src: "{,*/}*.css" | |
| }, { | |
| expand: true, | |
| dot: true, | |
| cwd: "<%= yeoman.app %>/styles/fonts/", | |
| dest: ".tmp/styles/fonts/", | |
| src: "*" | |
| }, { | |
| expand: true, | |
| dot: true, | |
| cwd: "<%= yeoman.app %>/images", | |
| dest: ".tmp/images/", | |
| src: "*" | |
| }] | |
| } | |
| }, | |
| concurrent: { | |
| server: [ | |
| "compass", | |
| "copy:styles" | |
| ], | |
| test: [ | |
| "copy:styles" | |
| ], | |
| dist: [ | |
| "compass", | |
| "copy:styles" | |
| ] | |
| }, | |
| bower: { | |
| // options: { | |
| // exclude: ["modernizr"] | |
| // }, | |
| all: { | |
| dest: ["app/bower_components"] | |
| } | |
| }, | |
| aws: require("./config/environment").aws, | |
| aws_s3: { | |
| options: { | |
| accessKeyId: "<%= aws.accessKeyId %>", | |
| secretAccessKey: "<%= aws.secretAccessKey %>", | |
| bucket: "<%= aws.bucket %>", | |
| region: "<%= aws.region %>", | |
| access: "public-read" | |
| }, | |
| dev: { | |
| files: [ | |
| {expand: true, cwd: "dist", src: ["**"], dest: "dist"} | |
| ] | |
| } | |
| } | |
| }); | |
| grunt.registerTask("server", function (target) { | |
| if (target === "dist") { | |
| return grunt.task.run(["build", "open", "connect:dist:keepalive"]); | |
| } | |
| grunt.task.run([ | |
| "clean:server", | |
| "compass:server", | |
| "browserify", | |
| "concat", | |
| "concurrent:server", | |
| "autoprefixer", | |
| "connect:livereload", | |
| //"open", | |
| "watch" | |
| ]); | |
| }); | |
| grunt.registerTask("test", [ | |
| "clean:server", | |
| "compass", | |
| "concurrent:test", | |
| "autoprefixer", | |
| "connect:test", | |
| "mocha" | |
| ]); | |
| grunt.registerTask("build", [ | |
| "jshint", | |
| "test", | |
| "clean:dist", | |
| "compass:dist", | |
| "useminPrepare", | |
| "concurrent:dist", | |
| "autoprefixer", | |
| "browserify", | |
| "concat", | |
| //"cssmin", | |
| //"uglify", | |
| "copy", | |
| "rev", | |
| "usemin" | |
| ]); | |
| grunt.registerTask("deploy", [ | |
| "build", | |
| "aws_s3" | |
| ]); | |
| grunt.registerTask("default", [ | |
| "build" | |
| ]); | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment