'use strict'; module.exports = function(grunt) { // Configurable paths var yoConfig = { livereload: 35729, src: 'src', dist: 'dist' }; // Livereload setup var lrSnippet = require('connect-livereload')({port: yoConfig.livereload}); var mountFolder = function (connect, dir) { return connect.static(require('path').resolve(dir)); }; // Load all grunt tasks require('load-grunt-tasks')(grunt, {scope: 'devDependencies'}); // Project configuration grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), yo: yoConfig, meta: { banner: '/**\n' + ' * <%= pkg.name %>\n' + ' * @version v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n' + ' * @link <%= pkg.homepage %>\n' + ' * @author <%= pkg.author.name %> <<%= pkg.author.email %>>\n' + ' * @license MIT License, http://www.opensource.org/licenses/MIT\n' + ' */\n' }, open: { server: { path: 'http://localhost:<%= connect.options.port %>' } }, clean: { dist: { files: [{ dot: true, src: [ '.tmp', '<%= yo.dist %>/*', '!<%= yo.dist %>/.git*' ] }] }, server: '.tmp' }, watch: { gruntfile: { files: '<%= jshint.gruntfile.src %>', tasks: ['jshint:gruntfile'] }, app: { files: [ '<%= yo.src %>/{,*/}*.html', '{.tmp,<%= yo.src %>}/{,*/}*.css', '{.tmp,<%= yo.src %>}/{,*/}*.js' ], tasks: ['concat'], options: { livereload: yoConfig.livereload } } }, connect: { options: { port: 9000, hostname: '0.0.0.0' // Change this to '0.0.0.0' to access the server from outside. }, livereload: { options: { middleware: function (connect) { return [ lrSnippet, mountFolder(connect, '.tmp'), mountFolder(connect, yoConfig.src) ]; } } } }, less: { options: { // dumpLineNumbers: 'all', paths: ['<%= yo.src %>'] }, dist: { files: { '<%= yo.src %>/<%= yo.name %>.css': '<%= yo.src %>/<%= yo.name %>.less' } } }, jshint: { gruntfile: { options: { jshintrc: '.jshintrc' }, src: 'Gruntfile.js' }, src: { options: { jshintrc: '.jshintrc' }, src: ['<%= yo.src %>/{,*/}*.js'] } }, ngAnnotate: { options: { banner: '<%= meta.banner %>' }, dist: { src: ['<%= yo.src %>/<%= pkg.name %>.js'], dest: '<%= yo.dist %>/<%= pkg.name %>.js' } // dist: { // files: { // '/.js': '/.js' // } // } }, concat: { options: { banner: '<%= meta.banner %>', stripBanners: true }, dist: { src: ['<%= yo.src %>/<%= pkg.name %>.js'], dest: '<%= yo.dist %>/<%= pkg.name %>.js' } }, uglify: { options: { banner: '<%= meta.banner %>' }, dist: { src: '<%= concat.dist.dest %>', dest: '<%= yo.dist %>/<%= pkg.name %>.min.js' } } }); grunt.registerTask('build', [ 'clean:dist', 'ngAnnotate:dist', 'uglify:dist' ]); grunt.registerTask('default', ['build']); };