# Generated on 2014-08-10 using generator-angular 0.9.5 "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 = (grunt) -> # Load grunt tasks automatically require("load-grunt-tasks") grunt # Time how long tasks take. Can help when optimizing build times require("time-grunt") grunt # Configurable paths for the application appConfig = app: require("./bower.json").appPath or "app" dist: "dist" docs: "docs" # Define the configuration for all the tasks grunt.initConfig # Project settings yeoman: appConfig # Watches files for changes and runs tasks based on the changed files watch: bower: files: ["bower.json"] tasks: ["wiredep"] coffee: files: ["<%= yeoman.app %>/scripts/**/*.{coffee,litcoffee,coffee.md}"] tasks: ["newer:coffee:dist"] coffeeTest: files: ["test/spec/{,*/}*.{coffee,litcoffee,coffee.md}"] tasks: [ "newer:coffee:test" "karma" ] compass: files: ["<%= yeoman.app %>/styles/{,*/}*.{scss,sass}"] tasks: [ "compass:server" "autoprefixer" ] gruntfile: files: ["Gruntfile.js"] livereload: options: livereload: "<%= connect.options.livereload %>" files: [ "<%= yeoman.app %>/{,*/}*.html" ".tmp/styles/{,*/}*.css" ".tmp/scripts/**/*.js" "<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}" ] # Generate Changelog changelog: options: dest: 'CHANGELOG.md' versionFile: 'package.json' # The actual grunt server settings connect: options: port: 9000 # Change this to '0.0.0.0' to access the server from outside. hostname: "localhost" livereload: 35729 livereload: options: open: true middleware: (connect) -> [ connect.static(".tmp") connect().use("/bower_components", connect.static("./bower_components")) connect.static(appConfig.app) ] test: options: port: 9001 middleware: (connect) -> [ connect.static(".tmp") connect.static("test") connect().use("/bower_components", connect.static("./bower_components")) connect.static(appConfig.app) ] dist: options: open: true base: "<%= yeoman.dist %>" docs: options: open: true base: "<%= yeoman.docs %>" # Make sure code styles are up to par and there are no obvious mistakes jshint: options: jshintrc: ".jshintrc" reporter: require("jshint-stylish") all: src: ["Gruntfile.js"] # Empties folders to start fresh clean: dist: files: [ dot: true src: [ ".tmp" "<%= yeoman.dist %>/{,*/}*" "!<%= yeoman.dist %>/.git*" ] ] server: ".tmp" docs: "<%= yeoman.docs %>" # Add vendor prefixed styles autoprefixer: options: browsers: ["last 1 version"] dist: files: [ expand: true cwd: ".tmp/styles/" src: "{,*/}*.css" dest: ".tmp/styles/" ] # Automatically inject Bower components into the app wiredep: app: src: ["<%= yeoman.app %>/index.html"] ignorePath: /\.\.\// sass: src: ["<%= yeoman.app %>/styles/{,*/}*.{scss,sass}"] ignorePath: /(\.\.\/){1,2}bower_components\// # Compiles CoffeeScript to JavaScript coffee: options: sourceMap: true sourceRoot: "" 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" ] ngdocs: all: ['.tmp/scripts/**/*.js'] # Compiles Sass to CSS and generates necessary files if requested 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: "./bower_components" httpImagesPath: "/images" httpGeneratedImagesPath: "/images/generated" httpFontsPath: "/styles/fonts" relativeAssets: false assetCacheBuster: false raw: "Sass::Script::Number.precision = 10\n" dist: options: generatedImagesDir: "<%= yeoman.dist %>/images/generated" server: options: debugInfo: true # Renames files for browser caching purposes filerev: dist: src: [ "<%= yeoman.dist %>/scripts/{,*/}*.js" "<%= yeoman.dist %>/styles/{,*/}*.css" # "<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}" "<%= yeoman.dist %>/styles/fonts/*" ] # 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: html: "<%= yeoman.app %>/index.html" options: dest: "<%= yeoman.dist %>" flow: html: steps: js: [ "concat" "uglifyjs" ] css: ["cssmin"] post: {} # Performs rewrites based on filerev and the useminPrepare configuration usemin: html: ["<%= yeoman.dist %>/{,*/}*.html"] css: ["<%= yeoman.dist %>/styles/{,*/}*.css"] options: assetsDirs: [ "<%= yeoman.dist %>" "<%= yeoman.dist %>/images" ] # The following *-min tasks will produce minified files in the dist folder # By default, your `index.html`'s will take care of # minification. These next options are pre-configured if you do not wish # to use the Usemin blocks. # cssmin: { # dist: { # files: { # '<%= yeoman.dist %>/styles/main.css': [ # '.tmp/styles/{,*/}*.css' # ] # } # } # }, # uglify: { # dist: { # files: { # '<%= yeoman.dist %>/scripts/scripts.js': [ # '<%= yeoman.dist %>/scripts/scripts.js' # ] # } # } # }, # concat: { # dist: {} # }, imagemin: dist: files: [ expand: true cwd: "<%= yeoman.app %>/images" src: "{,*/}*.{png,jpg,jpeg,gif}" dest: "<%= yeoman.dist %>/images" ] svgmin: dist: files: [ expand: true cwd: "<%= yeoman.app %>/images" src: "{,*/}*.svg" dest: "<%= yeoman.dist %>/images" ] htmlmin: dist: options: collapseWhitespace: true conservativeCollapse: true collapseBooleanAttributes: true removeCommentsFromCDATA: true removeOptionalTags: true files: [ expand: true cwd: "<%= yeoman.dist %>" src: [ "*.html" "views/{,*/}*.html" ] dest: "<%= yeoman.dist %>" ] # ngmin tries to make the code safe for minification automatically by # using the Angular long form for dependency injection. It doesn't work on # things like resolve or inject so those have to be done manually. ngmin: dist: files: [ expand: true cwd: ".tmp/concat/scripts" src: "*.js" dest: ".tmp/concat/scripts" ] # Replace Google CDN references cdnify: dist: html: ["<%= yeoman.dist %>/*.html"] # Copies remaining files to places other tasks can use copy: dist: files: [ { expand: true dot: true cwd: "<%= yeoman.app %>" dest: "<%= yeoman.dist %>" src: [ "*.{ico,png,txt}" ".htaccess" "*.html" "views/{,*/}*.html" "images/{,*/}*.{webp}" "fonts/*" ] } { expand: true cwd: ".tmp/images" dest: "<%= yeoman.dist %>/images" src: ["generated/*"] } { expand: true cwd: "." src: "bower_components/bootstrap-sass-official/assets/fonts/bootstrap/*" dest: "<%= yeoman.dist %>" } ] styles: expand: true cwd: "<%= yeoman.app %>/styles" dest: ".tmp/styles/" src: "{,*/}*.css" # Run some tasks in parallel to speed up the build process concurrent: server: [ "coffee:dist" "compass:server" ] test: [ "coffee" "compass" ] dist: [ "coffee" "compass:dist" "imagemin" "svgmin" ] # Test settings karma: unit: configFile: "test/karma.conf.coffee" singleRun: true grunt.registerTask "serve", "Compile then start a connect web server", (target) -> if target is "dist" return grunt.task.run([ "build" "connect:dist:keepalive" ]) else if target is "docs" return grunt.task.run([ "docs" "connect:docs:keepalive" ]) grunt.task.run [ "clean:server" "wiredep" "concurrent:server" "autoprefixer" "connect:livereload" "watch" ] return grunt.registerTask "server", "DEPRECATED TASK. Use the \"serve\" task instead", (target) -> grunt.log.warn "The `server` task has been deprecated. Use `grunt serve` to start a server." grunt.task.run ["serve:" + target] return grunt.registerTask "test", [ "clean:server" "concurrent:test" "autoprefixer" "connect:test" "karma" ] grunt.registerTask "build", [ "clean:dist" "wiredep" "useminPrepare" "concurrent:dist" "autoprefixer" "concat" "ngmin" "copy:dist" "cdnify" "cssmin" "uglify" "filerev" "usemin" "htmlmin" ] grunt.registerTask "docs", [ "clean:docs" "coffee:dist" "ngdocs" ] grunt.registerTask "default", [ "newer:jshint" "test" "build" ] return