Skip to content

Instantly share code, notes, and snippets.

@totty90
Last active January 4, 2016 06:58
Show Gist options
  • Save totty90/8584989 to your computer and use it in GitHub Desktop.
Save totty90/8584989 to your computer and use it in GitHub Desktop.
gruntfile.js
// Generated on 2013-09-17 using generator-webapp 0.4.2
'use strict';
// # Globbing
// for performance reasons we're only matching one level down:
// 'test/spec/{,*/}*.js'
// use this if you want to recursively match all subfolders:
// 'test/spec/**/*.js'
module.exports = function (grunt) {
// show elapsed time at the end
require('time-grunt')(grunt);
// load all grunt tasks
require('load-grunt-tasks')(grunt);
grunt.loadNpmTasks('grunt-mocha-test');
grunt.loadNpmTasks('grunt-bower-requirejs');
// configurable paths
var yeomanConfig = {
app: 'app',
dist: 'dist'
};
grunt.initConfig({
yeoman: yeomanConfig,
watch: {
coffee: {
files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'],
tasks: ['coffee:dist']
},
coffeeTest: {
files: ['test/spec/{,*/}*.coffee'],
tasks: ['coffee:test']
},
compass: {
files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'],
tasks: ['compass:server', 'autoprefixer']
},
styles: {
files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
tasks: ['copy:styles', 'autoprefixer']
},
gameAssets: {
files: ['<%= yeoman.app %>/scripts/game/{,*/}*.{png,jpeg,jpg,gid,json}'],
tasks: ['copy:gameAssets']
},
gameAssets2: {
files: ['<%= yeoman.app %>/scripts/game/assets/{,*/}*.*'],
tasks: ['copy:gameAssets2']
},
livereload: {
options: {
// livereload: '<%= connect.options.livereload %>'
},
files: [
'<%= yeoman.app %>/*.html',
'.tmp/styles/{,*/}*.css',
'{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
'<%= yeoman.app %>/bower_components_private/{,*/}*.js'
],
tasks: ['devcode:server', 'livereload']
}
},
connect: {
options: {
port: 9000,
livereload: 35729,
// change this to '0.0.0.0' to access the server from outside
hostname: 'localhost'
},
livereload: {
options: {
open: false,
base: [
'.tmp',
yeomanConfig.app
]
}
},
test: {
options: {
base: [
'.tmp',
'test',
yeomanConfig.app,
]
}
},
dist: {
options: {
open: true,
base: yeomanConfig.dist
}
}
},
clean: {
dist: {
files: [{
dot: true,
src: [
'.tmp',
'<%= yeoman.dist %>/*',
'!<%= yeoman.dist %>/.git*'
]
}]
},
server: '.tmp'
},
jshint: {
options: {
jshintrc: '.jshintrc'
},
all: [
'Gruntfile.js',
'<%= yeoman.app %>/scripts/{,*/}*.js',
'!<%= yeoman.app %>/scripts/vendor/*',
'test/spec/{,*/}*.js'
]
},
mocha: {
all: {
options: {
run: true,
urls: ['http://<%= connect.test.options.hostname %>:<%= connect.test.options.port %>/index.html']
}
}
},
mochaTest: {
test: {
options: {
reporter: 'spec'
},
src: ['test/spec/**/*.js']
}
},
coffee: {
dist: {
files: [{
expand: true,
cwd: '<%= yeoman.app %>/scripts',
src: '{,*/}*.coffee',
dest: '.tmp/scripts',
ext: '.js'
}]
},
test: {
files: [{
expand: true,
cwd: 'test/spec',
src: '{,*/}*.coffee',
dest: '.tmp/spec',
ext: '.js'
}]
}
},
compass: {
options: {
sassDir: '<%= yeoman.app %>/styles',
cssDir: '.tmp/styles',
generatedImagesDir: '.tmp/images/generated',
imagesDir: '<%= yeoman.app %>/images',
javascriptsDir: '<%= yeoman.app %>/scripts',
fontsDir: '<%= yeoman.app %>/styles/fonts',
importPath: '<%= yeoman.app %>',
httpImagesPath: '/images',
httpGeneratedImagesPath: '/images/generated',
httpFontsPath: '/styles/fonts',
relativeAssets: true,
outputStyle: 'expanded',
assetCacheBuster: false
},
dist: {
options: {
generatedImagesDir: '<%= yeoman.dist %>/images/generated'
}
},
server: {
options: {
}
}
},
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: {}
},*/
requirejs: {
dist: {
// Options: https://github.com/jrburke/r.js/blob/master/build/example.build.js
options: {
// `name` and `out` is set by grunt-usemin
baseUrl: '<%= yeoman.app %>/scripts',
optimize: 'uglify2', // none, uglify2
// TODO: Figure out how to make sourcemaps work with grunt-usemin
// https://github.com/yeoman/grunt-usemin/issues/30
//generateSourceMaps: true,
// required to support SourceMaps
// http://requirejs.org/docs/errors.html#sourcemapcomments
preserveLicenseComments: false,
useStrict: true,
wrap: false,
//uglify2: {} // https://github.com/mishoo/UglifyJS2
// findNestedDependencies: true
}
}
},
rev: {
dist: {
files: {
src: [
'<%= yeoman.dist %>/scripts/{,*/}*.js',
'<%= yeoman.dist %>/styles/{,*/}*.css',
'<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}',
'<%= yeoman.dist %>/styles/fonts/{,*/}*.*'
]
}
}
},
useminPrepare: {
options: {
dest: '<%= yeoman.dist %>'
},
html: '<%= yeoman.app %>/index.html'
},
usemin: {
options: {
dirs: ['<%= yeoman.dist %>']
},
html: ['<%= yeoman.dist %>/{,*/}*.html'],
css: ['<%= yeoman.dist %>/styles/{,*/}*.css']
},
imagemin: {
dist: {
files: [{
expand: true,
cwd: '<%= yeoman.app %>/images',
src: '{,*/}*.{png,jpg,jpeg}',
dest: '<%= yeoman.dist %>/images'
}]
}
},
svgmin: {
dist: {
files: [{
expand: true,
cwd: '<%= yeoman.app %>/images',
src: '{,*/}*.svg',
dest: '<%= yeoman.dist %>/images'
}]
}
},
cssmin: {
// This task is pre-configured if you do not wish to use Usemin
// blocks for your CSS. By default, the Usemin block from your
// `index.html` will take care of minification, e.g.
//
// <!-- build:css({.tmp,app}) styles/main.css -->
//
// dist: {
// files: {
// '<%= yeoman.dist %>/styles/main.css': [
// '.tmp/styles/{,*/}*.css',
// '<%= yeoman.app %>/styles/{,*/}*.css'
// ]
// }
// }
},
htmlmin: {
dist: {
options: {
/*removeCommentsFromCDATA: true,
// https://github.com/yeoman/grunt-usemin/issues/44
//collapseWhitespace: true,
collapseBooleanAttributes: true,
removeAttributeQuotes: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeOptionalTags: true*/
},
files: [{
expand: true,
cwd: '<%= yeoman.app %>',
src: '*.html',
dest: '<%= yeoman.dist %>'
}]
}
},
// 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/{,*/}*.{webp,gif}',
'styles/fonts/{,*/}*.*',
'scripts/game/assets/fonts/{,*/}*.*',
'bower_components/flatstrap/assets/font/*.*' // flatstrap
// 'bower_components/sass-bootstrap/fonts/*.*' // bootstrap
]
}]
},
gameAssets2: {
expand : true,
dot : true,
cwd : '<%= yeoman.app %>/scripts/game/assets',
dest : '<%= yeoman.dist %>/scripts/game/assets',
src : '{,*/}*.*'
},
gameAssets: {
expand : true,
dot : true,
cwd : '<%= yeoman.app %>/scripts/game/images',
dest : '<%= yeoman.dist %>/scripts/game/images',
src : './**/*.{png,jpg,jpeg,gif,json}'
},
styles: {
expand : true,
dot : true,
cwd : '<%= yeoman.app %>/styles',
dest : '.tmp/styles/',
src : './**/*.css'
},
// flatstrap: {
// dest: '.tmp/bower_components/flatstrap/assets/css/bootstrap.css',
// src: '<%= yeoman.app %>/bower_components/flatstrap/assets/css/bootstrap.css'
// },
bootstrapSelect: {
dest: '.tmp/bower_components/bootstrap-select/bootstrap-select.css',
src: '<%= yeoman.app %>/bower_components/bootstrap-select/bootstrap-select.css'
},
slickGrid: {
dest: '.tmp/bower_components/slickgrid/slick.grid.css',
src: '<%= yeoman.app %>/bower_components/slickgrid/slick.grid.css'
},
'bootstrap-tour': {
dest: '.tmp/bower_components/bootstrap-tour/build/css/bootstrap-tour.css',
src: '<%= yeoman.app %>/bower_components/bootstrap-tour/build/css/bootstrap-tour.css'
}
// ,
// perfectScrollbar: {
// dest: '.tmp/bower_components/perfect-scrollbar/src/perfect-scrollbar.css',
// src: '<%= yeoman.app %>/bower_components/perfect-scrollbar/src/perfect-scrollbar.css'
// }
},
modernizr: {
devFile: '<%= yeoman.app %>/bower_components/modernizr/modernizr.js',
outputFile: '<%= yeoman.dist %>/bower_components/modernizr/modernizr.js',
files: [
'<%= yeoman.dist %>/scripts/{,*/}*.js',
'<%= yeoman.dist %>/styles/{,*/}*.css',
'!<%= yeoman.dist %>/scripts/vendor/*'
],
uglify: true
},
concurrent: {
server: [
'compass:server',
'coffee:dist',
'copy:styles',
'copy:gameAssets',
'copy:gameAssets2'
],
test: [
'coffee',
'copy:styles',
'copy:gameAssets',
'copy:gameAssets2'
],
dist: [
// 'coffee',
'compass',
'copy:styles',
'copy:gameAssets',
'copy:gameAssets2',
'imagemin',
'svgmin',
'htmlmin'
]
},
bower: {
options: {
exclude: ['modernizr']
},
all: {
rjsConfig: '<%= yeoman.app %>/scripts/main.js'
},
install: {
}
},
devcode :
{
options :
{
html: true, // html files parsing?
js: true, // javascript files parsing?
css: true, // css files parsing?
clean: true, // removes devcode comments even if code was not removed
block: {
open: 'devcode', // with this string we open a block of code
close: 'endcode' // with this string we close a block of code
},
dest: 'dist' // default destination which overwrittes environment variable
},
server : { // settings for task used with 'devcode:server'
options: {
source: '<%= yeoman.app %>/scripts/',
dest: '.tmp/',
env: 'development'
}
},
dist : { // settings for task used with 'devcode:dist'
options: {
source: 'dist/',
dest: 'dist/',
env: 'production'
}
}
},
});
grunt.registerTask('copy-extra-css', [
'copy:bootstrapSelect',
'copy:slickGrid',
'copy:bootstrap-tour'
// 'copy:perfectScrollbar'
]);
grunt.registerTask('server2', 'Start a custom web server.', function() {
var done = this.async();
require('./server/index.js').on('close', done);
});
grunt.registerTask('server', 'Start a custom web server.', function() {
grunt.task.run([
'clean:server',
'devcode:server',
'concurrent:server',
'autoprefixer',
'watch'
]);
var server = require('./server/index.js');
server.use(require('connect-livereload')({
port: 35729
}));
// server.use(require('express').static(yeomanConfig.dist));
// server.listen(80);
});
grunt.registerTask('server-old', function (target) {
if (target === 'dist') {
return grunt.task.run(['build', 'connect:dist:keepalive']);
}
grunt.task.run([
'clean:server',
'devcode:server',
'concurrent:server',
'autoprefixer',
'connect:livereload',
'watch'
]);
});
grunt.registerTask('test-old', [
'clean:server',
'concurrent:test',
'autoprefixer',
'connect:test',
'mocha'
]);
grunt.registerTask('test', 'mochaTest');
grunt.registerTask('build', [
'clean:dist',
'useminPrepare',
'copy-extra-css',
'concurrent:dist',
'autoprefixer',
'requirejs',
'concat',
'cssmin',
'uglify',
'modernizr',
'copy:dist',
'devcode:dist',
'rev',
'usemin'
]);
grunt.registerTask('default', [
'jshint',
'test',
'build'
]);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment