123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- // Generated on 2015-02-03 using
- // generator-webapp 0.5.1
- 'use strict';
- // # Globbing
- // for performance reasons we're only matching one level down:
- // 'test/spec/{,*/}*.js'
- // If you want to recursively match all subfolders, use:
- // 'test/spec/**/*.js'
- module.exports = function (grunt) {
- // Time how long tasks take. Can help when optimizing build times
- require('time-grunt')(grunt);
- // Load grunt tasks automatically
- require('load-grunt-tasks')(grunt);
- // Configurable paths
- var config = {
- app: 'app',
- dist: 'dist'
- };
- // Define the configuration for all the tasks
- grunt.initConfig({
- // Project settings
- config: config,
- // Watches files for changes and runs tasks based on the changed files
- watch: {
- bower: {
- files: ['bower.json'],
- tasks: ['wiredep']
- },
- js: {
- files: ['<%= config.app %>/scripts/{,*/}*.js'],
- tasks: ['jshint'],
- options: {
- livereload: true
- }
- },
- jstest: {
- files: ['test/spec/{,*/}*.js'],
- tasks: ['test:watch']
- },
- gruntfile: {
- files: ['Gruntfile.js']
- },
- styles: {
- files: ['<%= config.app %>/styles/{,*/}*.css'],
- tasks: ['newer:copy:styles', 'autoprefixer']
- },
- livereload: {
- options: {
- livereload: '<%= connect.options.livereload %>'
- },
- files: [
- '<%= config.app %>/{,*/}*.html',
- '.tmp/styles/{,*/}*.css',
- '<%= config.app %>/assets/{,*/}*'
- ]
- }
- },
- // The actual grunt server settings
- connect: {
- options: {
- port: 8090,
- open: true,
- livereload: 35729,
- // Change this to '0.0.0.0' to access the server from outside
- hostname: 'localhost'
- },
- livereload: {
- options: {
- middleware: function(connect) {
- return [
- connect.static('.tmp'),
- connect().use('/bower_components', connect.static('./bower_components')),
- connect.static(config.app)
- ];
- }
- }
- },
- test: {
- options: {
- open: false,
- port: 9001,
- middleware: function(connect) {
- return [
- connect.static('.tmp'),
- connect.static('test'),
- connect().use('/bower_components', connect.static('./bower_components')),
- connect.static(config.app)
- ];
- }
- }
- },
- dist: {
- options: {
- base: '<%= config.dist %>',
- livereload: false
- }
- }
- },
- // Empties folders to start fresh
- clean: {
- dist: {
- files: [{
- dot: true,
- src: [
- '.tmp',
- '<%= config.dist %>/*',
- '!<%= config.dist %>/.git*'
- ]
- }]
- },
- server: '.tmp'
- },
- // Make sure code styles are up to par and there are no obvious mistakes
- jshint: {
- options: {
- jshintrc: '.jshintrc',
- reporter: require('jshint-stylish')
- },
- all: [
- 'Gruntfile.js',
- '<%= config.app %>/scripts/{,*/}*.js',
- '!<%= config.app %>/scripts/vendor/*',
- 'test/spec/{,*/}*.js'
- ]
- },
- // Add vendor prefixed styles
- autoprefixer: {
- options: {
- browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1']
- },
- dist: {
- files: [{
- expand: true,
- cwd: '.tmp/styles/',
- src: '{,*/}*.css',
- dest: '.tmp/styles/'
- }]
- }
- },
- // Automatically inject Bower components into the HTML file
- wiredep: {
- app: {
- ignorePath: /^\/|\.\.\//,
- src: ['<%= config.app %>/index.html'],
- exclude: ['bower_components/bootstrap/dist/js/bootstrap.js']
- }
- },
- // Renames files for browser caching purposes
- rev: {
- dist: {
- files: {
- src: [
- '<%= config.dist %>/scripts/{,*/}*.js',
- '<%= config.dist %>/styles/{,*/}*.css',
- '<%= config.dist %>/assets/{,*/}*.*',
- '<%= config.dist %>/styles/fonts/{,*/}*.*',
- '<%= config.dist %>/*.{ico,png}'
- ]
- }
- }
- },
- // Reads HTML for usemin blocks to enable smart builds that automatically
- // concat, minify and revision files. Creates configurations in memory so
- // additional tasks can operate on them
- useminPrepare: {
- options: {
- dest: '<%= config.dist %>'
- },
- html: '<%= config.app %>/index.html'
- },
- // Performs rewrites based on rev and the useminPrepare configuration
- usemin: {
- options: {
- assetsDirs: [
- '<%= config.dist %>',
- '<%= config.dist %>/assets',
- '<%= config.dist %>/styles'
- ]
- },
- html: ['<%= config.dist %>/{,*/}*.html'],
- css: ['<%= config.dist %>/styles/{,*/}*.css']
- },
- // The following *-min tasks produce minified files in the dist folder
- imagemin: {
- dist: {
- files: [{
- expand: true,
- cwd: '<%= config.app %>/assets',
- src: '{,*/}*.{gif,jpeg,jpg,png}',
- dest: '<%= config.dist %>/assets'
- }]
- }
- },
- svgmin: {
- dist: {
- files: [{
- expand: true,
- cwd: '<%= config.app %>/assets',
- src: '{,*/}*.svg',
- dest: '<%= config.dist %>/assets'
- }]
- }
- },
- htmlmin: {
- dist: {
- options: {
- collapseBooleanAttributes: true,
- collapseWhitespace: true,
- conservativeCollapse: true,
- removeAttributeQuotes: true,
- removeCommentsFromCDATA: true,
- removeEmptyAttributes: true,
- removeOptionalTags: true,
- removeRedundantAttributes: true,
- useShortDoctype: true
- },
- files: [{
- expand: true,
- cwd: '<%= config.dist %>',
- src: '{,*/}*.html',
- dest: '<%= config.dist %>'
- }]
- }
- },
- // By default, your `index.html`'s <!-- Usemin block --> will take care
- // of minification. These next options are pre-configured if you do not
- // wish to use the Usemin blocks.
- // cssmin: {
- // dist: {
- // files: {
- // '<%= config.dist %>/styles/main.css': [
- // '.tmp/styles/{,*/}*.css',
- // '<%= config.app %>/styles/{,*/}*.css'
- // ]
- // }
- // }
- // },
- // uglify: {
- // dist: {
- // files: {
- // '<%= config.dist %>/scripts/scripts.js': [
- // '<%= config.dist %>/scripts/scripts.js'
- // ]
- // }
- // }
- // },
- // concat: {
- // dist: {}
- // },
- // Copies remaining files to places other tasks can use
- copy: {
- dist: {
- files: [{
- expand: true,
- dot: true,
- cwd: '<%= config.app %>',
- dest: '<%= config.dist %>',
- src: [
- '*.{ico,png,txt}',
- 'assets/{,*/}*.webp',
- '{,*/}*.html',
- 'styles/fonts/{,*/}*.*'
- ]
- }, {
- src: 'node_modules/apache-server-configs/dist/.htaccess',
- dest: '<%= config.dist %>/.htaccess'
- }, {
- expand: true,
- dot: true,
- cwd: 'bower_components/bootstrap/dist',
- src: 'fonts/*',
- dest: '<%= config.dist %>'
- }]
- },
- styles: {
- expand: true,
- dot: true,
- cwd: '<%= config.app %>/styles',
- dest: '.tmp/styles/',
- src: '{,*/}*.css'
- }
- },
- // Generates a custom Modernizr build that includes only the tests you
- // reference in your app
- modernizr: {
- dist: {
- devFile: 'bower_components/modernizr/modernizr.js',
- outputFile: '<%= config.dist %>/scripts/vendor/modernizr.js',
- files: {
- src: [
- '<%= config.dist %>/scripts/{,*/}*.js',
- '<%= config.dist %>/styles/{,*/}*.css',
- '!<%= config.dist %>/scripts/vendor/*'
- ]
- },
- uglify: true
- }
- },
- // Run some tasks in parallel to speed up build process
- concurrent: {
- server: [
- 'copy:styles'
- ],
- test: [
- 'copy:styles'
- ],
- dist: [
- 'copy:styles',
- 'imagemin',
- 'svgmin'
- ]
- }
- });
- grunt.registerTask('serve', 'start the server and preview your app, --allow-remote for remote access', function (target) {
- if (grunt.option('allow-remote')) {
- grunt.config.set('connect.options.hostname', '0.0.0.0');
- }
- if (target === 'dist') {
- return grunt.task.run(['build', 'connect:dist:keepalive']);
- }
- grunt.task.run([
- 'clean:server',
- 'wiredep',
- 'concurrent:server',
- 'autoprefixer',
- 'connect:livereload',
- 'watch'
- ]);
- });
- grunt.registerTask('server', function (target) {
- grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
- grunt.task.run([target ? ('serve:' + target) : 'serve']);
- });
- grunt.registerTask('test', function (target) {
- if (target !== 'watch') {
- grunt.task.run([
- 'clean:server',
- 'concurrent:test',
- 'autoprefixer'
- ]);
- }
- grunt.task.run([
- 'connect:test',
- 'mocha'
- ]);
- });
- grunt.registerTask('build', [
- 'clean:dist',
- 'wiredep',
- 'useminPrepare',
- 'concurrent:dist',
- 'autoprefixer',
- 'concat',
- 'cssmin',
- 'uglify',
- 'copy:dist',
- 'modernizr',
- 'rev',
- 'usemin',
- 'htmlmin'
- ]);
- grunt.registerTask('default', [
- 'newer:jshint',
- 'test',
- 'build'
- ]);
- };
|