// Generated on 2013-04-17 using generator-webapp 0.1.7 'use strict'; var lrSnippet = require('grunt-contrib-livereload/lib/utils').livereloadSnippet; 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' 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({ pkg: grunt.file.readJSON('package.json'), yeoman: yeomanConfig, watch: { compass: { files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], tasks: ['compass:server'] }, livereload: { files: [ '<%= yeoman.app %>/*.html', '{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css', '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js', '<%= yeoman.app %>/images/{,*/,**/}*.{png,jpg,jpeg,gif,webp,svg}' ], tasks: ['livereload'] }, jst: { files: ['<%= yeoman.app %>/templates/*.html'], tasks: ['jst'] } }, connect: { options: { port: 9000, hostname: 'localhost' }, livereload: { options: { middleware: function (connect) { return [ lrSnippet, mountFolder(connect, '.tmp'), mountFolder(connect, 'app') ]; } } }, test: { options: { middleware: function (connect) { return [ mountFolder(connect, '.tmp'), mountFolder(connect, 'test') ]; } } }, dist: { options: { middleware: function (connect) { return [ mountFolder(connect, 'dist') ]; } } } }, open: { server: { path: 'http://<%= connect.options.hostname %>:<%= connect.options.port %>' } }, 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' ] }, compass: { options: { sassDir: '<%= yeoman.app %>/styles', cssDir: '.tmp/styles', imagesDir: '<%= yeoman.app %>/images', javascriptsDir: '<%= yeoman.app %>/scripts', fontsDir: '<%= yeoman.app %>/styles/fonts', importPath: 'app/components', relativeAssets: true }, dist: {}, server: { options: { debugInfo: true } } }, uglify: { options: { banner: grunt.file.read('MASTHEAD') } }, rev: { dist: { files: { src: [ '<%= yeoman.dist %>/scripts/{,*/}*.js', '<%= yeoman.dist %>/styles/{,*/}*.css', '<%= yeoman.dist %>/styles/fonts/*' ] } } }, useminPrepare: { html: '<%= yeoman.app %>/index.html', options: { dest: '<%= yeoman.dist %>' } }, usemin: { html: ['<%= yeoman.dist %>/{,*/}*.html'], css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], options: { dirs: ['<%= yeoman.dist %>'] } }, 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: { options: { banner: grunt.file.read('MASTHEAD') }, dist: { files: { '<%= yeoman.dist %>/styles/main.css': [ '.tmp/styles/{,*/}*.css', '<%= yeoman.app %>/styles/{,*/}*.css' ] } } }, htmlmin: { dist: { options: { // removeComments: true, // 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,txt}', '.htaccess', 'images/{,*/}*.{webp,gif}', 'styles/fonts/*' ] }] } }, concurrent: { server: [ 'compass:server', 'jst' ], test: [ 'compass' ], dist: [ 'compass:dist', 'imagemin', 'svgmin', 'htmlmin', 'jst' ] }, jst: { compile: { options: { processName: function(filename) { var pathPieces = filename.split('/'); return pathPieces[pathPieces.length -1].replace(/\.html$/, ''); } }, files: { '<%= yeoman.app %>/scripts/templates.js': ['<%= yeoman.app %>/templates/*.html'] } } }, cdn: { options: { flatten: true }, dist: { cdn: 'http://acdn.com/', src: [ '<%= yeoman.dist %>/index.html', '<%= yeoman.dist %>/styles/*.css' ] } } }); grunt.renameTask('regarde', 'watch'); grunt.registerTask('server', function (target) { if (target === 'dist') { return grunt.task.run([ 'build', 'open', 'connect:dist:keepalive' ]); } grunt.task.run([ 'clean:server', 'concurrent:server', 'livereload-start', 'connect:livereload', 'open', 'watch' ]); }); grunt.registerTask('test', [ 'clean:server', 'concurrent:test', 'connect:test', ]); grunt.registerTask('build', [ 'clean:dist', 'useminPrepare', 'concurrent:dist', 'cssmin', 'concat', 'uglify', 'copy', 'rev', 'usemin' ]); grunt.registerTask('deploy', [ 'build', 'cdn' ]); grunt.registerTask('default', [ 'jshint', 'test', 'build' ]); };