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