ericclemmons / grunt-angular-templates

Grunt build task to concatenate & pre-load your AngularJS templates
MIT License
711 stars 108 forks source link

Script still hangs? #110

Closed am17an closed 9 years ago

am17an commented 9 years ago

This is in relation to #43
the ngtemplates task is configured as

ngtemplates: {
      options: {
        // This should be the name of your apps angular module
        module: 'whateverApp',
        htmlmin: {
          collapseBooleanAttributes: true,
          collapseWhitespace: true,
          removeAttributeQuotes: true,
          removeEmptyAttributes: true,
          removeRedundantAttributes: true,
          removeScriptTypeAttributes: true,
          removeStyleLinkTypeAttributes: true
        },
        usemin: 'app/app.js'
      },
      main: {
        cwd: '<%= yeoman.client %>',
        src: ['{app,components}/**/*.html'],
        dest: '.tmp/templates.js'
      },
      tmp: {
        cwd: '.tmp',
        src: ['{app,components}/**/*.html'],
        dest: '.tmp/tmp-templates.js'
      }
    }

When I run grunt ngtemplates --verbose I get

Initializing
Command-line options: --verbose

Reading "Gruntfile.js" Gruntfile...OK

Registering Gruntfile tasks.
Reading package.json...OK
Parsing package.json...OK
Initializing config...OK
Loading "Gruntfile.js" tasks...OK
+ build, default, express-keepalive, serve, server, test, wait

Running tasks: ngtemplates

Loading "grunt-angular-templates

Registering "/Users/amangupta/Desktop/programming/Foodport/node_modules/grunt-angular-templates/tasks" tasks.
Loading "angular-templates.js" tasks...OK
+ ngtemplates
>> Plugin loaded.

Running "ngtemplates" task

Running "ngtemplates:main" (ngtemplates) task
Verifying property ngtemplates.main exists in config...OK
Files: app/about/about.html, app/account/login/login.html, app/account/settings/settings.html, app/account/signup/signup.html, app/admin/admin.html, app/main/main.html, app/signup/signup.address.html, app/signup/signup.html, app/signup/signup.meal-plan.html, app/signup/signup.meal-plan.non-veg.html, app/signup/signup.meal-plan.veg.html, app/signup/signup.payment.html, app/signup/signup.profile.html, app/signup/signup.review-order.html, components/footer/footer.html, components/navbar/navbar.html -> .tmp/templates.js
Options: angular="angular", bootstrap=undefined, concat=null, htmlmin={"collapseBooleanAttributes":true,"collapseWhitespace":true,"removeAttributeQuotes":true,"removeEmptyAttributes":true,"removeRedundantAttributes":true,"removeScriptTypeAttributes":true,"removeStyleLinkTypeAttributes":true}, module="whateverApp", prefix="", source=undefined, standalone=false, url=undefined, usemin="app/app.js", append=false
Options: angular="angular", bootstrap=undefined, concat=null, htmlmin={"collapseBooleanAttributes":true,"collapseWhitespace":true,"removeAttributeQuotes":true,"removeEmptyAttributes":true,"removeRedundantAttributes":true,"removeScriptTypeAttributes":true,"removeStyleLinkTypeAttributes":true}, module="whateverApp", prefix="", source=undefined, standalone=false, url=undefined, usemin="app/app.js", append=false
Reading client/app/about/about.html...OK
Reading client/app/account/login/login.html...OK
Reading client/app/account/settings/settings.html...OK
Reading client/app/account/signup/signup.html...OK
Reading client/app/admin/admin.html...OK
Reading client/app/main/main.html...OK
Reading client/app/signup/signup.address.html...OK
Reading client/app/signup/signup.html...OK
Reading client/app/signup/signup.meal-plan.html...OK
Reading client/app/signup/signup.meal-plan.non-veg.html...OK
Reading client/app/signup/signup.meal-plan.veg.html...OK
Reading client/app/signup/signup.payment.html...OK
Reading client/app/signup/signup.profile.html...OK
Reading client/app/signup/signup.review-order.html...OK
Reading client/components/footer/footer.html...OK
Reading client/components/navbar/navbar.html...OK

After this it just hangs. FWIW, I haven't touched the grunt file after yeomaning it from angular-fullstack I'm using version 0.5.7

chanced commented 9 years ago

+1

\ Gruntfile.js **

// Generated on 2014-09-28 using generator-angular-fullstack 2.0.13
'use strict';

module.exports = function (grunt) {
  var localConfig;
  try {
    localConfig = require('./server/config/local.env');
  } catch(e) {
    localConfig = {};
  }

  // Load grunt tasks automatically, when needed
  require('jit-grunt')(grunt, {
    express: 'grunt-express-server',
    useminPrepare: 'grunt-usemin',
    ngtemplates: 'grunt-angular-templates',
    cdnify: 'grunt-google-cdn',
    protractor: 'grunt-protractor-runner',
    injector: 'grunt-asset-injector',
    buildcontrol: 'grunt-build-control'
  });

  // Time how long tasks take. Can help when optimizing build times
  require('time-grunt')(grunt);

  // Define the configuration for all the tasks
  grunt.initConfig({

    // Project settings
    pkg: grunt.file.readJSON('package.json'),
    yeoman: {
      // configurable paths
      client: require('./bower.json').appPath || 'client',
      dist: 'dist'
    },
    express: {
      options: {
        port: process.env.PORT || 9000
      },
      dev: {
        options: {
          script: 'server/app.js',
          debug: true
        }
      },
      prod: {
        options: {
          script: 'dist/server/app.js'
        }
      }
    },
    open: {
      server: {
        url: 'http://localhost:<%= express.options.port %>'
      }
    },
    watch: {
      injectJS: {
        files: [
          '<%= yeoman.client %>/{app,components}/**/*.js',
          '!<%= yeoman.client %>/{app,components}/**/*.spec.js',
          '!<%= yeoman.client %>/{app,components}/**/*.mock.js',
          '!<%= yeoman.client %>/app/app.js'],
        tasks: ['injector:scripts']
      },
      injectCss: {
        files: [
          '<%= yeoman.client %>/{app,components}/**/*.css'
        ],
        tasks: ['injector:css']
      },
      mochaTest: {
        files: ['server/**/*.spec.js'],
        tasks: ['env:test', 'mochaTest']
      },
      jsTest: {
        files: [
          '<%= yeoman.client %>/{app,components}/**/*.spec.js',
          '<%= yeoman.client %>/{app,components}/**/*.mock.js'
        ],
        tasks: ['newer:jshint:all', 'karma']
      },
      injectLess: {
        files: [
          '<%= yeoman.client %>/{app,components}/**/*.less'],
        tasks: ['injector:less']
      },
      less: {
        files: [
          '<%= yeoman.client %>/{app,components}/**/*.less'],
        tasks: ['less', 'autoprefixer']
      },
      gruntfile: {
        files: ['Gruntfile.js']
      },
      livereload: {
        files: [
          '{.tmp,<%= yeoman.client %>}/{app,components}/**/*.css',
          '{.tmp,<%= yeoman.client %>}/{app,components}/**/*.html',
          '{.tmp,<%= yeoman.client %>}/{app,components}/**/*.js',
          '!{.tmp,<%= yeoman.client %>}{app,components}/**/*.spec.js',
          '!{.tmp,<%= yeoman.client %>}/{app,components}/**/*.mock.js',
          '<%= yeoman.client %>/assets/images/{,*//*}*.{png,jpg,jpeg,gif,webp,svg}'
        ],
        options: {
          livereload: true
        }
      },
      express: {
        files: [
          'server/**/*.{js,json}'
        ],
        tasks: ['express:dev', 'wait'],
        options: {
          livereload: true,
          nospawn: true //Without this option specified express won't be reloaded
        }
      }
    },

    // Make sure code styles are up to par and there are no obvious mistakes
    jshint: {
      options: {
        jshintrc: '<%= yeoman.client %>/.jshintrc',
        reporter: require('jshint-stylish')
      },
      server: {
        options: {
          jshintrc: 'server/.jshintrc'
        },
        src: [
          'server/**/*.js',
          '!server/**/*.spec.js'
        ]
      },
      serverTest: {
        options: {
          jshintrc: 'server/.jshintrc-spec'
        },
        src: ['server/**/*.spec.js']
      },
      all: [
        '<%= yeoman.client %>/{app,components}/**/*.js',
        '!<%= yeoman.client %>/{app,components}/**/*.spec.js',
        '!<%= yeoman.client %>/{app,components}/**/*.mock.js'
      ],
      test: {
        src: [
          '<%= yeoman.client %>/{app,components}/**/*.spec.js',
          '<%= yeoman.client %>/{app,components}/**/*.mock.js'
        ]
      }
    },

    // Empties folders to start fresh
    clean: {
      dist: {
        files: [{
          dot: true,
          src: [
            '.tmp',
            '<%= yeoman.dist %>/*',
            '!<%= yeoman.dist %>/.git*',
            '!<%= yeoman.dist %>/.openshift',
            '!<%= yeoman.dist %>/Procfile'
          ]
        }]
      },
      server: '.tmp'
    },

    // Add vendor prefixed styles
    autoprefixer: {
      options: {
        browsers: ['last 1 version']
      },
      dist: {
        files: [{
          expand: true,
          cwd: '.tmp/',
          src: '{,*/}*.css',
          dest: '.tmp/'
        }]
      }
    },

    // Debugging with node inspector
    'node-inspector': {
      custom: {
        options: {
          'web-host': 'localhost'
        }
      }
    },

    // Use nodemon to run server in debug mode with an initial breakpoint
    nodemon: {
      debug: {
        script: 'server/app.js',
        options: {
          nodeArgs: ['--debug-brk'],
          env: {
            PORT: process.env.PORT || 9000
          },
          callback: function (nodemon) {
            nodemon.on('log', function (event) {
              console.log(event.colour);
            });

            // opens browser on initial server start
            nodemon.on('config:update', function () {
              setTimeout(function () {
                require('open')('http://localhost:8080/debug?port=5858');
              }, 500);
            });
          }
        }
      }
    },

    // Automatically inject Bower components into the app
    wiredep: {
      target: {
        src: '<%= yeoman.client %>/index.html',
        ignorePath: '<%= yeoman.client %>/',
        exclude: [/nouislider/, /jquery/, /lodash/, /bootstrap-sass-official/, /bootstrap.js/, '/json3/', '/es5-shim/', /bootstrap.css/, /font-awesome.css/ ]
      }
    },

    // Renames files for browser caching purposes
    rev: {
      dist: {
        files: {
          src: [
            '<%= yeoman.dist %>/public/{,*/}*.js',
            '<%= yeoman.dist %>/public/{,*/}*.css',
            '<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
            '<%= yeoman.dist %>/public/assets/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.client %>/index.html'],
      options: {
        dest: '<%= yeoman.dist %>/public'
      }
    },

    // Performs rewrites based on rev and the useminPrepare configuration
    usemin: {
      html: ['<%= yeoman.dist %>/public/{,*/}*.html'],
      css: ['<%= yeoman.dist %>/public/{,*/}*.css'],
      js: ['<%= yeoman.dist %>/public/{,*/}*.js'],
      options: {
        assetsDirs: [
          '<%= yeoman.dist %>/public',
          '<%= yeoman.dist %>/public/assets/images'
        ],
        // This is so we update image references in our ng-templates
        patterns: {
          js: [
            [/(assets\/images\/.*?\.(?:gif|jpeg|jpg|png|webp|svg))/gm, 'Update the JS to reference our revved images']
          ]
        }
      }
    },

    // The following *-min tasks produce minified files in the dist folder
    imagemin: {
      dist: {
        files: [{
          expand: true,
          cwd: '<%= yeoman.client %>/assets/images',
          src: '{,*/}*.{png,jpg,jpeg,gif}',
          dest: '<%= yeoman.dist %>/public/assets/images'
        }]
      }
    },

    svgmin: {
      dist: {
        files: [{
          expand: true,
          cwd: '<%= yeoman.client %>/assets/images',
          src: '{,*/}*.svg',
          dest: '<%= yeoman.dist %>/public/assets/images'
        }]
      }
    },
    uncss: {
      stylesheets: '.tmp/app/app.css',
      files: {
        '.tmp/app/app.css': 'client/{app,components}/**/*.html'
      }

    },

    // Allow the use of non-minsafe AngularJS files. Automatically makes it
    // minsafe compatible so Uglify does not destroy the ng references
    ngAnnotate: {
      dist: {
        files: [{
          expand: true,
          cwd: '.tmp/concat',
          src: '*/**.js',
          dest: '.tmp/concat'
        }]
      }
    },

    // Package all the html partials into a single javascript payload
    ngtemplates: {
      options: {
        // This should be the name of your apps angular module
        module: 'svrApp',
        htmlmin: {
          collapseBooleanAttributes: true,
          collapseWhitespace: true,
          removeAttributeQuotes: true,
          removeEmptyAttributes: true,
          removeRedundantAttributes: true,
          removeScriptTypeAttributes: true,
          removeStyleLinkTypeAttributes: true
        },
        usemin: 'app/app.js'
      },
      main: {
        cwd: '<%= yeoman.client %>',
        src: ['{app,components}/**/*.html'],
        dest: '.tmp/templates.js'
      },
      tmp: {
        cwd: '.tmp',
        src: ['{app,components}/**/*.html'],
        dest: '.tmp/tmp-templates.js'
      }
    },

    // Replace Google CDN references
    cdnify: {
      dist: {
        html: ['<%= yeoman.dist %>/public/*.html']
      }
    },

    // Copies remaining files to places other tasks can use
    copy: {
      dist: {
        files: [{
          expand: true,
          dot: true,
          cwd: '<%= yeoman.client %>',
          dest: '<%= yeoman.dist %>/public',
          src: [
            '*.{ico,png,txt}',
            '.htaccess',
            'bower_components/**/*',
            'assets/images/{,*/}*.{webp}',
            'assets/fonts/**/*',
            'index.html'
          ]
        }, {
          expand: true,
          cwd: '.tmp/images',
          dest: '<%= yeoman.dist %>/public/assets/images',
          src: ['generated/*']
        }, {
          expand: true,
          dest: '<%= yeoman.dist %>',
          src: [
            'package.json',
            'server/**/*'
          ]
        }]
      },
      styles: {
        expand: true,
        cwd: '<%= yeoman.client %>',
        dest: '.tmp/',
        src: ['{app,components}/**/*.css']
      }
    },

    buildcontrol: {
      options: {
        dir: 'dist',
        commit: true,
        push: true,
        connectCommits: false,
        message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%'
      },
      heroku: {
        options: {
          remote: 'heroku',
          branch: 'master'
        }
      },
      openshift: {
        options: {
          remote: 'openshift',
          branch: 'master'
        }
      }
    },

    // Run some tasks in parallel to speed up the build process
    concurrent: {
      server: [
        'less',
      ],
      test: [
        'less',
      ],
      debug: {
        tasks: [
          'nodemon',
          'node-inspector'
        ],
        options: {
          logConcurrentOutput: true
        }
      },
      dist: [
        'less',
        'imagemin',
        'svgmin'
      ]
    },

    // Test settings
    karma: {
      unit: {
        configFile: 'karma.conf.js',
        singleRun: true
      }
    },

    mochaTest: {
      options: {
        reporter: 'spec'
      },
      src: ['server/**/*.spec.js']
    },

    protractor: {
      options: {
        configFile: 'protractor.conf.js'
      },
      chrome: {
        options: {
          args: {
            browser: 'chrome'
          }
        }
      }
    },

    env: {
      test: {
        NODE_ENV: 'test'
      },
      prod: {
        NODE_ENV: 'production'
      },
      all: localConfig
    },

    // Compiles Less to CSS
    less: {
      options: {
        paths: [
          '<%= yeoman.client %>/bower_components',
          '<%= yeoman.client %>/app',
          '<%= yeoman.client %>/components'
        ]
      },
      server: {
        files: {
          '.tmp/app/app.css' : '<%= yeoman.client %>/app/app.less'
        }
      },
    },

    injector: {
      options: {

      },
      // Inject application script files into index.html (doesn't include bower)
      scripts: {
        options: {
          transform: function(filePath) {
            filePath = filePath.replace('/client/', '');
            filePath = filePath.replace('/.tmp/', '');
            return '<script src="' + filePath + '"></script>';
          },
          starttag: '<!-- injector:js -->',
          endtag: '<!-- endinjector -->'
        },
        files: {
          '<%= yeoman.client %>/index.html': [
              ['{.tmp,<%= yeoman.client %>}/{app,components}/**/*.js',
               '!{.tmp,<%= yeoman.client %>}/app/app.js',
               '!{.tmp,<%= yeoman.client %>}/{app,components}/**/*.spec.js',
               '!{.tmp,<%= yeoman.client %>}/{app,components}/**/*.mock.js']
            ]
        }
      },

      // Inject component less into app.less
      less: {
        options: {
          transform: function(filePath) {
            filePath = filePath.replace('/client/app/', '');
            filePath = filePath.replace('/client/components/', '');
            return '@import \'' + filePath + '\';';
          },
          starttag: '// injector',
          endtag: '// endinjector'
        },
        files: {
          '<%= yeoman.client %>/app/app.less': [
            '<%= yeoman.client %>/{app,components}/**/*.less',
            '!<%= yeoman.client %>/app/app.less'
          ]
        }
      },

      // Inject component css into index.html
      css: {
        options: {
          transform: function(filePath) {
            filePath = filePath.replace('/client/', '');
            filePath = filePath.replace('/.tmp/', '');
            return '<link rel="stylesheet" href="' + filePath + '">';
          },
          starttag: '<!-- injector:css -->',
          endtag: '<!-- endinjector -->'
        },
        files: {
          '<%= yeoman.client %>/index.html': [
            '<%= yeoman.client %>/{app,components}/**/*.css'
          ]
        }
      }
    },
  });

  // Used for delaying livereload until after server has restarted
  grunt.registerTask('wait', function () {
    grunt.log.ok('Waiting for server reload...');

    var done = this.async();

    setTimeout(function () {
      grunt.log.writeln('Done waiting!');
      done();
    }, 1500);
  });

  grunt.registerTask('express-keepalive', 'Keep grunt running', function() {
    this.async();
  });

  grunt.registerTask('serve', function (target) {
    if (target === 'dist') {
      return grunt.task.run(['build', 'env:all', 'env:prod', 'express:prod', 'wait', 'open', 'express-keepalive']);
    }

    if (target === 'debug') {
      return grunt.task.run([
        'clean:server',
        'env:all',
        'injector:less', 
        'concurrent:server',
        'injector',
        'wiredep',
        'autoprefixer',
        'concurrent:debug'
      ]);
    }

    grunt.task.run([
      'clean:server',
      'env:all',
      'injector:less', 
      'concurrent:server',
      'injector',
      'wiredep',
      'autoprefixer',
      'express:dev',
      'wait',
      'open',
      'watch'
    ]);
  });

  grunt.registerTask('server', function () {
    grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
    grunt.task.run(['serve']);
  });

  grunt.registerTask('test', function(target) {
    if (target === 'server') {
      return grunt.task.run([
        'env:all',
        'env:test',
        'mochaTest'
      ]);
    }

    else if (target === 'client') {
      return grunt.task.run([
        'clean:server',
        'env:all',
        'injector:less', 
        'concurrent:test',
        'injector',
        'autoprefixer',
        'karma'
      ]);
    }

    else if (target === 'e2e') {
      return grunt.task.run([
        'clean:server',
        'env:all',
        'env:test',
        'injector:less', 
        'concurrent:test',
        'injector',
        'wiredep',
        'autoprefixer',
        'express:dev',
        'protractor'
      ]);
    }

    else grunt.task.run([
      'test:server',
      'test:client'
    ]);
  });

  grunt.registerTask('build', [
    'clean:dist',
    'injector:less', 
    'concurrent:dist',
    'injector',
    'wiredep',
    'useminPrepare',
    'autoprefixer',
    'ngtemplates',
    'concat',
    'ngAnnotate',
    'copy:dist',
    'cdnify',
    'cssmin',
    'uglify',
    'rev',
    'usemin'
  ]);

  grunt.registerTask('default', [
    'newer:jshint',
    'test',
    'build'
  ]);
};
❯ grunt build --verbose
Initializing
Command-line options: --verbose

Reading "Gruntfile.js" Gruntfile...OK

Registering Gruntfile tasks.
Reading package.json...OK
Parsing package.json...OK
Initializing config...OK
Loading "Gruntfile.js" tasks...OK
+ build, default, express-keepalive, serve, server, test, wait

Running tasks: build

Running "build" task

Loading "grunt-contrib-clean

Registering "/Users/chance/Sites/svr/node_modules/grunt-contrib-clean/tasks" tasks.
Loading "clean.js" tasks...OK
+ clean
>> Plugin loaded.

Running "clean:dist" (clean) task
Verifying property clean.dist exists in config...OK
Files: .tmp, dist/public
Options: force=false, no-write=false
Options: force=false, no-write=false
Cleaning .tmp...OK
Cleaning dist/public...OK

Loading "grunt-asset-injector

Registering "/Users/chance/Sites/svr/node_modules/grunt-asset-injector/tasks" tasks.
Loading "injector.js" tasks...OK
+ injector
>> Plugin loaded.

Running "injector:less" (injector) task
Verifying property injector.less exists in config...OK
Files: client/app/account/login/login.less, client/app/admin/admin.less, client/app/layout.less, client/app/main/main.less, client/app/property/styles/property.less, client/app/property/styles/property.search.less, client/app/property/styles/property.show.less, client/app/styles/animations.less, client/app/styles/svr-font.less, client/components/bootstrap-checkbox/ng-check.less, client/components/navbar/navbar.less, client/components/nouislider/slider.less -> client/app/app.less
Options: min=false, template=null, bowerPrefix=null, addRootSlash, starttag="// injector", endtag="// endinjector", transform=undefined
Missing option `template`, using `dest` as template instead
Reading client/app/app.less...OK
Injecting less files (12 files)
>> Nothing changed

Loading "grunt-concurrent

Registering "/Users/chance/Sites/svr/node_modules/grunt-concurrent/tasks" tasks.
Loading "concurrent.js" tasks...OK
+ concurrent
>> Plugin loaded.

Running "concurrent:dist" (concurrent) task
Verifying property concurrent.dist exists in config...OK
Files: [no src] -> dist
Options: limit=8

    Initializing
    Command-line options: --verbose

    Reading "Gruntfile.js" Gruntfile...OK

    Registering Gruntfile tasks.
    Reading package.json...OK
    Parsing package.json...OK
    Initializing config...OK
    Loading "Gruntfile.js" tasks...OK
    + build, default, express-keepalive, serve, server, test, wait

    Running tasks: svgmin

    Loading "grunt-svgmin

    Registering "/Users/chance/Sites/svr/node_modules/grunt-svgmin/tasks" tasks.
    Loading "svgmin.js" tasks...OK
    + svgmin
    >> Plugin loaded.

    Running "svgmin" task

    Running "svgmin:dist" (svgmin) task
    Verifying property svgmin.dist exists in config...OK
    Files: client/assets/images/agent.svg -> dist/public/assets/images/agent.svg
    Files: client/assets/images/apartment.svg -> dist/public/assets/images/apartment.svg
    Files: client/assets/images/auction.svg -> dist/public/assets/images/auction.svg
    Files: client/assets/images/bath.svg -> dist/public/assets/images/bath.svg
    Files: client/assets/images/bathtub.svg -> dist/public/assets/images/bathtub.svg
    Files: client/assets/images/bed.svg -> dist/public/assets/images/bed.svg
    Files: client/assets/images/bid.svg -> dist/public/assets/images/bid.svg
    Files: client/assets/images/check.svg -> dist/public/assets/images/check.svg
    Files: client/assets/images/construct.svg -> dist/public/assets/images/construct.svg
    Files: client/assets/images/door.svg -> dist/public/assets/images/door.svg
    Files: client/assets/images/fan.svg -> dist/public/assets/images/fan.svg
    Files: client/assets/images/fence.svg -> dist/public/assets/images/fence.svg
    Files: client/assets/images/find-home.svg -> dist/public/assets/images/find-home.svg
    Files: client/assets/images/fireplace.svg -> dist/public/assets/images/fireplace.svg
    Files: client/assets/images/footage.svg -> dist/public/assets/images/footage.svg
    Files: client/assets/images/for-sale.svg -> dist/public/assets/images/for-sale.svg
    Files: client/assets/images/garage.svg -> dist/public/assets/images/garage.svg
    Files: client/assets/images/house1.svg -> dist/public/assets/images/house1.svg
    Files: client/assets/images/house2.svg -> dist/public/assets/images/house2.svg
    Files: client/assets/images/house3.svg -> dist/public/assets/images/house3.svg
    Files: client/assets/images/key.svg -> dist/public/assets/images/key.svg
    Files: client/assets/images/land.svg -> dist/public/assets/images/land.svg
    Files: client/assets/images/mansion.svg -> dist/public/assets/images/mansion.svg
    Files: client/assets/images/no-pets.svg -> dist/public/assets/images/no-pets.svg
    Files: client/assets/images/parking.svg -> dist/public/assets/images/parking.svg
    Files: client/assets/images/pool.svg -> dist/public/assets/images/pool.svg
    Files: client/assets/images/rv.svg -> dist/public/assets/images/rv.svg
    Files: client/assets/images/stairs.svg -> dist/public/assets/images/stairs.svg
    Files: client/assets/images/subdivision.svg -> dist/public/assets/images/subdivision.svg
    Files: client/assets/images/svr-text.svg -> dist/public/assets/images/svr-text.svg
    Files: client/assets/images/svr-tree.svg -> dist/public/assets/images/svr-tree.svg
    Files: client/assets/images/window.svg -> dist/public/assets/images/window.svg
    Options: (none)
    Reading client/assets/images/agent.svg...OK
    ✔ client/assets/images/agent.svg (saved 671 B 33%)
    Writing dist/public/assets/images/agent.svg...OK
    Reading client/assets/images/apartment.svg...OK
    ✔ client/assets/images/apartment.svg (saved 453 B 55%)
    Writing dist/public/assets/images/apartment.svg...OK
    Reading client/assets/images/auction.svg...OK
    ✔ client/assets/images/auction.svg (saved 582 B 43%)
    Writing dist/public/assets/images/auction.svg...OK
    Reading client/assets/images/bath.svg...OK
    ✔ client/assets/images/bath.svg (saved 429 B 46%)
    Writing dist/public/assets/images/bath.svg...OK
    Reading client/assets/images/bathtub.svg...OK
    ✔ client/assets/images/bathtub.svg (saved 1.58 kB 36%)
    Writing dist/public/assets/images/bathtub.svg...OK
    Reading client/assets/images/bed.svg...OK
    ✔ client/assets/images/bed.svg (saved 403 B 51%)
    Writing dist/public/assets/images/bed.svg...OK
    Reading client/assets/images/bid.svg...OK
    ✔ client/assets/images/bid.svg (saved 581 B 38%)
    Writing dist/public/assets/images/bid.svg...OK
    Reading client/assets/images/check.svg...OK
    ✔ client/assets/images/check.svg (saved 785 B 30%)
    Writing dist/public/assets/images/check.svg...OK
    Reading client/assets/images/construct.svg...OK
    ✔ client/assets/images/construct.svg (saved 660 B 53%)
    Writing dist/public/assets/images/construct.svg...OK
    Reading client/assets/images/door.svg...OK
    ✔ client/assets/images/door.svg (saved 388 B 63%)
    Writing dist/public/assets/images/door.svg...OK
    Reading client/assets/images/fan.svg...OK
    ✔ client/assets/images/fan.svg (saved 510 B 35%)
    Writing dist/public/assets/images/fan.svg...OK
    Reading client/assets/images/fence.svg...OK
    ✔ client/assets/images/fence.svg (saved 473 B 43%)
    Writing dist/public/assets/images/fence.svg...OK
    Reading client/assets/images/find-home.svg...OK
    ✔ client/assets/images/find-home.svg (saved 425 B 48%)
    Writing dist/public/assets/images/find-home.svg...OK
    Reading client/assets/images/fireplace.svg...OK
    ✔ client/assets/images/fireplace.svg (saved 725 B 39%)
    Writing dist/public/assets/images/fireplace.svg...OK
    Reading client/assets/images/footage.svg...OK
    ✔ client/assets/images/footage.svg (saved 404 B 53%)
    Writing dist/public/assets/images/footage.svg...OK
    Reading client/assets/images/for-sale.svg...OK
    ✔ client/assets/images/for-sale.svg (saved 411 B 65%)
    Writing dist/public/assets/images/for-sale.svg...OK
    Reading client/assets/images/garage.svg...OK
    ✔ client/assets/images/garage.svg (saved 392 B 59%)
    Writing dist/public/assets/images/garage.svg...OK
    Reading client/assets/images/house1.svg...OK
    ✔ client/assets/images/house1.svg (saved 493 B 59%)
    Writing dist/public/assets/images/house1.svg...OK
    Reading client/assets/images/house2.svg...OK
    ✔ client/assets/images/house2.svg (saved 494 B 56%)
    Writing dist/public/assets/images/house2.svg...OK
    Reading client/assets/images/house3.svg...OK
    ✔ client/assets/images/house3.svg (saved 447 B 55%)
    Writing dist/public/assets/images/house3.svg...OK
    Reading client/assets/images/key.svg...OK
    ✔ client/assets/images/key.svg (saved 513 B 34%)
    Writing dist/public/assets/images/key.svg...OK
    Reading client/assets/images/land.svg...OK
    ✔ client/assets/images/land.svg (saved 507 B 38%)
    Writing dist/public/assets/images/land.svg...OK
    Reading client/assets/images/mansion.svg...OK
    ✔ client/assets/images/mansion.svg (saved 425 B 49%)
    Writing dist/public/assets/images/mansion.svg...OK
    Reading client/assets/images/no-pets.svg...OK
    ✔ client/assets/images/no-pets.svg (saved 573 B 37%)
    Writing dist/public/assets/images/no-pets.svg...OK
    Reading client/assets/images/parking.svg...OK
    ✔ client/assets/images/parking.svg (saved 427 B 44%)
    Writing dist/public/assets/images/parking.svg...OK
    Reading client/assets/images/pool.svg...OK
    ✔ client/assets/images/pool.svg (saved 1.34 kB 26%)
    Writing dist/public/assets/images/pool.svg...OK
    Reading client/assets/images/rv.svg...OK
    ✔ client/assets/images/rv.svg (saved 471 B 38%)
    Writing dist/public/assets/images/rv.svg...OK
    Reading client/assets/images/stairs.svg...OK
    ✔ client/assets/images/stairs.svg (saved 602 B 50%)
    Writing dist/public/assets/images/stairs.svg...OK
    Reading client/assets/images/subdivision.svg...OK
    ✔ client/assets/images/subdivision.svg (saved 1.11 kB 34%)
    Writing dist/public/assets/images/subdivision.svg...OK
    Reading client/assets/images/svr-text.svg...OK
    ✔ client/assets/images/svr-text.svg (saved 4.75 kB 27%)
    Writing dist/public/assets/images/svr-text.svg...OK
    Reading client/assets/images/svr-tree.svg...OK
    ✔ client/assets/images/svr-tree.svg (saved 17.67 kB 30%)
    Writing dist/public/assets/images/svr-tree.svg...OK
    Reading client/assets/images/window.svg...OK
    ✔ client/assets/images/window.svg (saved 398 B 67%)
    Writing dist/public/assets/images/window.svg...OK
    Total saved: 40.1 kB

    Done, without errors.

    Execution Time (2014-11-10 07:39:06 UTC)
    loading tasks  111ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇ 26%
    svgmin:dist    321ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 74%
    Total 434ms

    Initializing
    Command-line options: --verbose

    Reading "Gruntfile.js" Gruntfile...OK

    Registering Gruntfile tasks.
    Reading package.json...OK
    Parsing package.json...OK
    Initializing config...OK
    Loading "Gruntfile.js" tasks...OK
    + build, default, express-keepalive, serve, server, test, wait

    Running tasks: less

    Loading "grunt-contrib-less

    Registering "/Users/chance/Sites/svr/node_modules/grunt-contrib-less/tasks" tasks.
    Loading "less.js" tasks...OK
    + less
    >> Plugin loaded.

    Running "less" task

    Running "less:server" (less) task
    Verifying property less.server exists in config...OK
    Files: client/app/app.less -> .tmp/app/app.css
    Options: report="min", banner="", paths=["client/bower_components","client/app","client/components"]
    Reading client/app/app.less...OK
    Writing .tmp/app/app.css...OK
    File .tmp/app/app.css created: 0 B → 334.19 kB

    Done, without errors.

    Execution Time (2014-11-10 07:39:06 UTC)
    loading tasks  134ms  ▇▇▇▇▇▇▇▇▇ 18%
    less:server    618ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 82%
    Total 752ms

    Initializing
    Command-line options: --verbose

    Reading "Gruntfile.js" Gruntfile...OK

    Registering Gruntfile tasks.
    Reading package.json...OK
    Parsing package.json...OK
    Initializing config...OK
    Loading "Gruntfile.js" tasks...OK
    + build, default, express-keepalive, serve, server, test, wait

    Running tasks: imagemin

    Loading "grunt-contrib-imagemin

    Registering "/Users/chance/Sites/svr/node_modules/grunt-contrib-imagemin/tasks" tasks.
    Loading "imagemin.js" tasks...OK
    + imagemin
    >> Plugin loaded.

    Running "imagemin" task

    Running "imagemin:dist" (imagemin) task
    Verifying property imagemin.dist exists in config...OK
    Files: client/assets/images/commercial.jpg -> dist/public/assets/images/commercial.jpg
    Files: client/assets/images/construction.jpg -> dist/public/assets/images/construction.jpg
    Files: client/assets/images/envelope.png -> dist/public/assets/images/envelope.png
    Files: client/assets/images/houses/h1.jpg -> dist/public/assets/images/houses/h1.jpg
    Files: client/assets/images/houses/h2.jpg -> dist/public/assets/images/houses/h2.jpg
    Files: client/assets/images/houses/h3.jpg -> dist/public/assets/images/houses/h3.jpg
    Files: client/assets/images/houses/h4.jpg -> dist/public/assets/images/houses/h4.jpg
    Files: client/assets/images/houses/h5.jpg -> dist/public/assets/images/houses/h5.jpg
    Files: client/assets/images/houses/h6.jpg -> dist/public/assets/images/houses/h6.jpg
    Files: client/assets/images/i.png -> dist/public/assets/images/i.png
    Files: client/assets/images/kitchen.jpg -> dist/public/assets/images/kitchen.jpg
    Files: client/assets/images/map-bg.jpg -> dist/public/assets/images/map-bg.jpg
    Files: client/assets/images/new_files/usr.png -> dist/public/assets/images/new_files/usr.png
    Files: client/assets/images/placeholder.png -> dist/public/assets/images/placeholder.png
    Files: client/assets/images/residential-services@1172x718.jpg -> dist/public/assets/images/residential-services@1172x718.jpg
    Files: client/assets/images/residential.jpg -> dist/public/assets/images/residential.jpg
    Files: client/assets/images/sellyourhome.jpg -> dist/public/assets/images/sellyourhome.jpg
    Files: client/assets/images/sold-bg.jpg -> dist/public/assets/images/sold-bg.jpg
    Files: client/assets/images/svr-logo-menu.png -> dist/public/assets/images/svr-logo-menu.png
    Files: client/assets/images/svr-logo.png -> dist/public/assets/images/svr-logo.png
    Files: client/assets/images/yeoman.png -> dist/public/assets/images/yeoman.png
    Options: interlaced, optimizationLevel=3, progressive
    ✔ client/assets/images/houses/h2.jpg (already optimized)
    ✔ client/assets/images/houses/h5.jpg (saved 867 B - 3%)
    ✔ client/assets/images/houses/h1.jpg (saved 719 B - 2%)
    ✔ client/assets/images/houses/h3.jpg (already optimized)
    ✔ client/assets/images/houses/h4.jpg (saved 146 B - 0%)
    ✔ client/assets/images/houses/h6.jpg (already optimized)
    ✔ client/assets/images/commercial.jpg (saved 5.22 kB - 5%)
    ✔ client/assets/images/i.png (saved 825 B - 87%)
    ✔ client/assets/images/kitchen.jpg (already optimized)
    ✔ client/assets/images/map-bg.jpg (saved 3.04 kB - 2%)
    ✔ client/assets/images/residential-services@1172x718.jpg (saved 2.88 kB - 2%)
    ✔ client/assets/images/sellyourhome.jpg (already optimized)
    ✔ client/assets/images/sold-bg.jpg (saved 5.44 kB - 5%)
    ✔ client/assets/images/residential.jpg (saved 4.26 kB - 2%)
    ✔ client/assets/images/svr-logo-menu.png (saved 1.11 kB - 26%)
    ✔ client/assets/images/construction.jpg (already optimized)
    ✔ client/assets/images/yeoman.png (saved 3.73 kB - 30%)
    ✔ client/assets/images/new_files/usr.png (saved 1.01 kB - 18%)
    ✔ client/assets/images/placeholder.png (saved 4.87 kB - 47%)
    ✔ client/assets/images/svr-logo.png (saved 13.92 kB - 45%)
    ✔ client/assets/images/envelope.png (saved 932 B - 9%)
    Minified 21 images (saved 48.97 kB)

    Done, without errors.

    Execution Time (2014-11-10 07:39:06 UTC)
    loading tasks  209ms  ▇▇▇▇▇▇▇▇▇▇▇ 23%
    imagemin:dist  708ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 77%
    Total 917ms

Running "injector" task

Running "injector:scripts" (injector) task
Verifying property injector.scripts exists in config...OK
Files: client/app/account/account.js, client/app/account/login/login.controller.js, client/app/account/settings/settings.controller.js, client/app/account/signup/signup.controller.js, client/app/admin/admin.controller.js, client/app/admin/admin.js, client/app/main/main.controller.js, client/app/main/main.js, client/app/property/controllers/search.controller.js, client/app/property/controllers/show.controller.js, client/app/property/filters/search.filter.js, client/app/property/services/property.search.service.js, client/app/property/services/property.service.js, client/app/property/services/search.service.js, client/app/property/states.js, client/components/auth/auth.service.js, client/components/auth/user.service.js, client/components/bootstrap-checkbox/angular-bootstrap-checkbox.js, client/components/filter/flatcurrency.filter.js, client/components/filter/plaintext.filter.js, client/components/filter/range.filter.js, client/components/geocode/geocode.service.js, client/components/mongoose-error/mongoose-error.directive.js, client/components/navbar/navbar.controller.js, client/components/ngupload/ng-s3upload.js, client/components/property-search-field/property-search-field.directive.js, client/components/slick/slick.js, client/components/socket/socket.service.js, client/components/switcher/ng-switcher.js -> client/index.html
Options: min=false, template=null, bowerPrefix=null, addRootSlash, starttag="<!-- injector:js -->", endtag="<!-- endinjector -->", transform=undefined
Missing option `template`, using `dest` as template instead
Reading client/index.html...OK
Injecting js files (29 files)
>> Nothing changed

Running "injector:less" (injector) task
Verifying property injector.less exists in config...OK
Files: client/app/account/login/login.less, client/app/admin/admin.less, client/app/layout.less, client/app/main/main.less, client/app/property/styles/property.less, client/app/property/styles/property.search.less, client/app/property/styles/property.show.less, client/app/styles/animations.less, client/app/styles/svr-font.less, client/components/bootstrap-checkbox/ng-check.less, client/components/navbar/navbar.less, client/components/nouislider/slider.less -> client/app/app.less
Options: min=false, template=null, bowerPrefix=null, addRootSlash, starttag="// injector", endtag="// endinjector", transform=undefined
Missing option `template`, using `dest` as template instead
Reading client/app/app.less...OK
Injecting less files (12 files)
>> Nothing changed

Running "injector:css" (injector) task
Verifying property injector.css exists in config...OK
Files: client/components/switcher/ng-switcher.css -> client/index.html
Options: min=false, template=null, bowerPrefix=null, addRootSlash, starttag="<!-- injector:css -->", endtag="<!-- endinjector -->", transform=undefined
Missing option `template`, using `dest` as template instead
Reading client/index.html...OK
Injecting css files (1 files)
>> Nothing changed

Loading "grunt-wiredep

Registering "/Users/chance/Sites/svr/node_modules/grunt-wiredep/tasks" tasks.
Loading "wiredep.js" tasks...OK
+ wiredep
>> Plugin loaded.

Running "wiredep" task

Running "wiredep:target" (wiredep) task
Verifying property wiredep.target exists in config...OK
Files: client/index.html
Verifying property wiredep.target.src exists in config...OK

Loading "grunt-usemin

Registering "/Users/chance/Sites/svr/node_modules/grunt-usemin/tasks" tasks.
Loading "usemin.js" tasks...OK
+ usemin, useminPrepare
>> Plugin loaded.

Running "useminPrepare" task

Running "useminPrepare:html" (useminPrepare) task
Verifying property useminPrepare.html exists in config...OK
Files: client/index.html -> html
Options: dest="dist/public"
Going through client/index.html to update the config
Looking for build script HTML comment blocks

Configuration is now:

  concat:
  { generated:
   { files:
      [ { dest: '.tmp/concat/app/vendor.css',
          src:
           [ 'client/bower_components/bootstrap/dist/css/bootstrap.css',
             'client/bower_components/font-awesome/css/font-awesome.css',
             'client/bower_components/slick-carousel/slick/slick.css',
             'client/assets/redactor/redactor.css',
             'client/bower_components/angular-busy/dist/angular-busy.css',
             'client/bower_components/animate/animate.css',
             'client/bower_components/ngDialog/css/ngDialog.css',
             'client/bower_components/ngDialog/css/ngDialog-theme-default.css' ] },
        { dest: '.tmp/concat/app/app.css',
          src:
           [ '{.tmp,client}/app/app.css',
             '{.tmp,client}/components/switcher/ng-switcher.css' ] },
        { dest: '.tmp/concat/app/vendor.js',
          src:
           [ 'client/bower_components/jquery/dist/jquery.js',
             'client/bower_components/jquery-bridget/jquery.bridget.js',
             'client/assets/redactor/redactor.js',
             'client/bower_components/lodash/dist/lodash.underscore.js',
             'client/bower_components/angular/angular.js',
             'client/bower_components/angular-resource/angular-resource.js',
             'client/bower_components/angular-cookies/angular-cookies.js',
             'client/bower_components/angular-sanitize/angular-sanitize.js',
             'client/bower_components/angular-socket-io/socket.js',
             'client/bower_components/angular-ui-router/release/angular-ui-router.js',
             'client/bower_components/angular-redactor/angular-redactor.js',
             'client/bower_components/angular-pageslide-directive/dist/angular-pageslide-directive.js',
             'client/bower_components/get-style-property/get-style-property.js',
             'client/bower_components/get-size/get-size.js',
             'client/bower_components/eventie/eventie.js',
             'client/bower_components/doc-ready/doc-ready.js',
             'client/bower_components/eventEmitter/EventEmitter.js',
             'client/bower_components/matches-selector/matches-selector.js',
             'client/bower_components/outlayer/item.js',
             'client/bower_components/outlayer/outlayer.js',
             'client/bower_components/masonry/masonry.js',
             'client/bower_components/angular-once/once.js',
             'client/bower_components/angular-google-maps/dist/angular-google-maps.js',
             'client/bower_components/slick-carousel/slick/slick.min.js',
             'client/bower_components/angular-animate/angular-animate.js',
             'client/bower_components/angular-busy/dist/angular-busy.js',
             'client/bower_components/ui-router-extras/release/ct-ui-router-extras.js',
             'client/bower_components/angular-local-storage/angular-local-storage.js',
             'client/bower_components/imagesloaded/imagesloaded.js',
             'client/bower_components/angular-masonry-directive/src/angular-masonry-directive.js',
             'client/bower_components/angular-parallax/scripts/angular-parallax.js',
             'client/bower_components/angular-scroll/angular-scroll.min.js',
             'client/bower_components/ng-parallax/angular-parallax.min.js',
             'client/bower_components/ngDialog/js/ngDialog.js',
             'client/socket.io-client/socket.io.js',
             'client/bower_components/nouislider/jquery.nouislider.js',
             'client/bower_components/nouislider/Link.js',
             'client/bower_components/angular-nouislider/src/nouislider.js' ] },
        { dest: '.tmp/concat/app/app.js',
          src:
           [ '{.tmp,client}/app/app.js',
             '{.tmp,client}/util/lodash-mixins.js',
             '{.tmp,client}/app/account/account.js',
             '{.tmp,client}/app/account/login/login.controller.js',
             '{.tmp,client}/app/account/settings/settings.controller.js',
             '{.tmp,client}/app/account/signup/signup.controller.js',
             '{.tmp,client}/app/admin/admin.controller.js',
             '{.tmp,client}/app/admin/admin.js',
             '{.tmp,client}/app/main/main.controller.js',
             '{.tmp,client}/app/main/main.js',
             '{.tmp,client}/app/property/controllers/search.controller.js',
             '{.tmp,client}/app/property/controllers/show.controller.js',
             '{.tmp,client}/app/property/filters/search.filter.js',
             '{.tmp,client}/app/property/services/property.search.service.js',
             '{.tmp,client}/app/property/services/property.service.js',
             '{.tmp,client}/app/property/services/search.service.js',
             '{.tmp,client}/app/property/states.js',
             '{.tmp,client}/components/auth/auth.service.js',
             '{.tmp,client}/components/auth/user.service.js',
             '{.tmp,client}/components/bootstrap-checkbox/angular-bootstrap-checkbox.js',
             '{.tmp,client}/components/filter/flatcurrency.filter.js',
             '{.tmp,client}/components/filter/plaintext.filter.js',
             '{.tmp,client}/components/filter/range.filter.js',
             '{.tmp,client}/components/geocode/geocode.service.js',
             '{.tmp,client}/components/mongoose-error/mongoose-error.directive.js',
             '{.tmp,client}/components/navbar/navbar.controller.js',
             '{.tmp,client}/components/ngupload/ng-s3upload.js',
             '{.tmp,client}/components/property-search-field/property-search-field.directive.js',
             '{.tmp,client}/components/slick/slick.js',
             '{.tmp,client}/components/socket/socket.service.js',
             '{.tmp,client}/components/switcher/ng-switcher.js' ] } ] } }

  uglify:
  { generated:
   { files:
      [ { dest: 'dist/public/app/vendor.js',
          src: [ '.tmp/concat/app/vendor.js' ] },
        { dest: 'dist/public/app/app.js',
          src: [ '.tmp/concat/app/app.js' ] } ] } }

  cssmin:
  { generated:
   { files:
      [ { dest: 'dist/public/app/vendor.css',
          src: [ '.tmp/concat/app/vendor.css' ] },
        { dest: 'dist/public/app/app.css',
          src: [ '.tmp/concat/app/app.css' ] } ] } }

Loading "grunt-autoprefixer

Registering "/Users/chance/Sites/svr/node_modules/grunt-autoprefixer/tasks" tasks.
Loading "autoprefixer.js" tasks...OK
+ autoprefixer
>> Plugin loaded.

Running "autoprefixer" task

Running "autoprefixer:dist" (autoprefixer) task
Verifying property autoprefixer.dist exists in config...OK
Files: .tmp/app/app.css -> .tmp/app/app.css
Options: cascade, diff=false, map=false, silent=false, browsers=["last 1 version"]
Reading .tmp/app/app.css...OK
Writing .tmp/app/app.css...OK
File .tmp/app/app.css created.

Loading "grunt-angular-templates

Registering "/Users/chance/Sites/svr/node_modules/grunt-angular-templates/tasks" tasks.
Loading "angular-templates.js" tasks...OK
+ ngtemplates
>> Plugin loaded.

Running "ngtemplates" task

Running "ngtemplates:main" (ngtemplates) task
Verifying property ngtemplates.main exists in config...OK
Files: app/account/login/login.html, app/account/settings/settings.html, app/account/signup/signup.html, app/admin/admin.html, app/main/main.html, app/property/views/common/property.card.html, app/property/views/index.html, app/property/views/search/_details.html, app/property/views/search/_filter.html, app/property/views/search/search.html, app/property/views/show/_highlights.html, app/property/views/show/_photos.html, app/property/views/show/_social-actions.html, app/property/views/show/_view-actions.html, app/property/views/show/show.html, components/navbar/navbar.html, components/ngupload/ngupload.html, components/property-search-field/property-found.html, components/property-search-field/property-search-field.html -> .tmp/templates.js
Options: angular="angular", bootstrap=undefined, concat=null, htmlmin={"collapseBooleanAttributes":true,"collapseWhitespace":true,"removeAttributeQuotes":true,"removeEmptyAttributes":true,"removeRedundantAttributes":true,"removeScriptTypeAttributes":true,"removeStyleLinkTypeAttributes":true}, module="svrApp", prefix="", source=undefined, standalone=false, url=undefined, usemin="app/app.js", append=false
Options: angular="angular", bootstrap=undefined, concat=null, htmlmin={"collapseBooleanAttributes":true,"collapseWhitespace":true,"removeAttributeQuotes":true,"removeEmptyAttributes":true,"removeRedundantAttributes":true,"removeScriptTypeAttributes":true,"removeStyleLinkTypeAttributes":true}, module="svrApp", prefix="", source=undefined, standalone=false, url=undefined, usemin="app/app.js", append=false
Reading client/app/account/login/login.html...OK
Reading client/app/account/settings/settings.html...OK
Reading client/app/account/signup/signup.html...OK
Reading client/app/admin/admin.html...OK
Reading client/app/main/main.html...OK
Reading client/app/property/views/common/property.card.html...OK
Reading client/app/property/views/index.html...OK
Reading client/app/property/views/search/_details.html...OK
Reading client/app/property/views/search/_filter.html...OK
Reading client/app/property/views/search/search.html...OK
Reading client/app/property/views/show/_highlights.html...OK
Reading client/app/property/views/show/_photos.html...OK
Reading client/app/property/views/show/_social-actions.html...OK
Reading client/app/property/views/show/_view-actions.html...OK
Reading client/app/property/views/show/show.html...OK
Reading client/components/navbar/navbar.html...OK
Reading client/components/ngupload/ngupload.html...OK
Reading client/components/property-search-field/property-found.html...OK
Reading client/components/property-search-field/property-search-field.html...OK
ericclemmons commented 9 years ago

So far, every issue we've had involving "hanging", errors, etc. has been due to htmlmin. I'd remove that part entirely & see if it still persists. There's not really anything this script is doing that would cause hanging :)

chanced commented 9 years ago

Yea, I'm sorry I missed this. In my case, the issue was due to a malformed tag.

kreigne commented 9 years ago

I just commented out the entire htmlmin config object, and now it works. I am minifying html in another grunt task after concat, so no problem at all.

Annoying bug, but with a workaround.

ericclemmons commented 9 years ago

I'm going to have to remove htmlmin. This thing is the cause for all recent issues.

activeiz commented 9 years ago

An extra quote following a space would hang running ngtemplates: <div ng-class="{top:$first}" "> no error codes just hanged but worked after removing the extra quote from my code <div ng-class="{top:$first}">

balmasi commented 9 years ago

If you use git for version control just do a git bisect until you find the commit with the invalid html. From there you can git checkout HEAD~1 an_html_file.html for each html file and then run grunt ngtemplates or whatever your grunt task is, until you find the bad file. Then fix it and you're good to go!

harryjoy commented 9 years ago

@activeiz +1, I hade same mistake.. Thanks.