title: Warning: Task "clean:server" not found
body: <p>If I use any grunt task it throws this error. Someone on the irc channel said it was possible that my gruntfile was corrupt, but there is no information on the internet that could help me learn to fix this issue</p>
  
  <pre><code>Warning: Task "(some task)" not found. Use --force to continue.
  
  Aborted due to warnings.
  
  
  Execution Time (2014-07-22 18:06:52 UTC)
  loading tasks   5ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 28%
  serve          12ms     ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 67%
  Total 18ms
  </code></pre>
  
  <p>If I do grunt serve the error says that task "clean:server can be found".
  but my gruntfile contains clean server</p>
  
  <pre><code>clean: {
          dist: {
              files: [{
                  dot: true,
                  src: [
                      '.tmp',
                      '&lt;%= config.dist %&gt;/*',
                      '!&lt;%= config.dist %&gt;/.git*'
                  ]
              }]
          },
          server: '.tmp'
      }
  </code></pre>
  
  <p>Here is the entire gruntfile.js </p>
  
  <pre><code>// Generated on 2014-07-22 using generator-webapp 0.4.9
  '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 = function (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
  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: ['bowerInstall']
          },
          js: {
              files: ['&lt;%= config.app %&gt;/scripts/{,*/}*.js'],
              tasks: ['jshint'],
              options: {
                  livereload: true
              }
          },
          jstest: {
              files: ['test/spec/{,*/}*.js'],
              tasks: ['test:watch']
          },
          gruntfile: {
              files: ['Gruntfile.js']
          },
          sass: {
              files: ['&lt;%= config.app %&gt;/styles/{,*/}*.{scss,sass}'],
              tasks: ['sass:server', 'autoprefixer']
          },
          styles: {
              files: ['&lt;%= config.app %&gt;/styles/{,*/}*.css'],
              tasks: ['newer:copy:styles', 'autoprefixer']
          },
          livereload: {
              options: {
                  livereload: '&lt;%= connect.options.livereload %&gt;'
              },
              files: [
                  '&lt;%= config.app %&gt;/{,*/}*.html',
                  '.tmp/styles/{,*/}*.css',
                  '&lt;%= config.app %&gt;/images/{,*/}*'
              ]
          }
      },
  
      // The actual grunt server settings
      connect: {
          options: {
              port: 9000,
              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: '&lt;%= config.dist %&gt;',
                  livereload: false
              }
          }
      },
  
      // Empties folders to start fresh
      clean: {
          dist: {
              files: [{
                  dot: true,
                  src: [
                      '.tmp',
                      '&lt;%= config.dist %&gt;/*',
                      '!&lt;%= config.dist %&gt;/.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',
              '&lt;%= config.app %&gt;/scripts/{,*/}*.js',
              '!&lt;%= config.app %&gt;/scripts/vendor/*',
              'test/spec/{,*/}*.js'
          ]
      },
  
      // Mocha testing framework configuration options
      mocha: {
          all: {
              options: {
                  run: true,
                  urls: ['http://&lt;%= connect.test.options.hostname %&gt;:&lt;%= connect.test.options.port %&gt;/index.html']
              }
          }
      },
  
      // Compiles Sass to CSS and generates necessary files if requested
      sass: {
          options: {
              loadPath: [
                  'bower_components'
              ]
          },
          dist: {
              files: [{
                  expand: true,
                  cwd: '&lt;%= config.app %&gt;/styles',
                  src: ['*.scss'],
                  dest: '.tmp/styles',
                  ext: '.css'
              }]
          },
          server: {
              files: [{
                  expand: true,
                  cwd: '&lt;%= config.app %&gt;/styles',
                  src: ['*.scss'],
                  dest: '.tmp/styles',
                  ext: '.css'
              }]
          }
      },
  
      // 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 HTML file
      bowerInstall: {
          app: {
              src: ['&lt;%= config.app %&gt;/index.html'],
              exclude: ['bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap.js']
          },
          sass: {
              src: ['&lt;%= config.app %&gt;/styles/{,*/}*.{scss,sass}']
          }
      },
  
      // Renames files for browser caching purposes
      rev: {
          dist: {
              files: {
                  src: [
                      '&lt;%= config.dist %&gt;/scripts/{,*/}*.js',
                      '&lt;%= config.dist %&gt;/styles/{,*/}*.css',
                      '&lt;%= config.dist %&gt;/images/{,*/}*.*',
                      '&lt;%= config.dist %&gt;/styles/fonts/{,*/}*.*',
                      '&lt;%= config.dist %&gt;/*.{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: '&lt;%= config.dist %&gt;'
          },
          html: '&lt;%= config.app %&gt;/index.html'
      },
  
      // Performs rewrites based on rev and the useminPrepare configuration
      usemin: {
          options: {
              assetsDirs: ['&lt;%= config.dist %&gt;', '&lt;%= config.dist %&gt;/images']
          },
          html: ['&lt;%= config.dist %&gt;/{,*/}*.html'],
          css: ['&lt;%= config.dist %&gt;/styles/{,*/}*.css']
      },
  
      // The following *-min tasks produce minified files in the dist folder
      imagemin: {
          dist: {
              files: [{
                  expand: true,
                  cwd: '&lt;%= config.app %&gt;/images',
                  src: '{,*/}*.{gif,jpeg,jpg,png}',
                  dest: '&lt;%= config.dist %&gt;/images'
              }]
          }
      },
  
      svgmin: {
          dist: {
              files: [{
                  expand: true,
                  cwd: '&lt;%= config.app %&gt;/images',
                  src: '{,*/}*.svg',
                  dest: '&lt;%= config.dist %&gt;/images'
              }]
          }
      },
  
      htmlmin: {
          dist: {
              options: {
                  collapseBooleanAttributes: true,
                  collapseWhitespace: true,
                  removeAttributeQuotes: true,
                  removeCommentsFromCDATA: true,
                  removeEmptyAttributes: true,
                  removeOptionalTags: true,
                  removeRedundantAttributes: true,
                  useShortDoctype: true
              },
              files: [{
                  expand: true,
                  cwd: '&lt;%= config.dist %&gt;',
                  src: '{,*/}*.html',
                  dest: '&lt;%= config.dist %&gt;'
              }]
          }
      },
  
      // By default, your `index.html`'s &lt;!-- Usemin block --&gt; will take care of
      // minification. These next options are pre-configured if you do not wish
      // to use the Usemin blocks.
      // cssmin: {
      //     dist: {
      //         files: {
      //             '&lt;%= config.dist %&gt;/styles/main.css': [
      //                 '.tmp/styles/{,*/}*.css',
      //                 '&lt;%= config.app %&gt;/styles/{,*/}*.css'
      //             ]
      //         }
      //     }
      // },
      // uglify: {
      //     dist: {
      //         files: {
      //             '&lt;%= config.dist %&gt;/scripts/scripts.js': [
      //                 '&lt;%= config.dist %&gt;/scripts/scripts.js'
      //             ]
      //         }
      //     }
      // },
      // concat: {
      //     dist: {}
      // },
  
      // Copies remaining files to places other tasks can use
      copy: {
          dist: {
              files: [{
                  expand: true,
                  dot: true,
                  cwd: '&lt;%= config.app %&gt;',
                  dest: '&lt;%= config.dist %&gt;',
                  src: [
                      '*.{ico,png,txt}',
                      '.htaccess',
                      'images/{,*/}*.webp',
                      '{,*/}*.html',
                      'styles/fonts/{,*/}*.*'
                  ]
              }]
          },
          styles: {
              expand: true,
              dot: true,
              cwd: '&lt;%= config.app %&gt;/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: '&lt;%= config.dist %&gt;/scripts/vendor/modernizr.js',
              files: {
                  src: [
                      '&lt;%= config.dist %&gt;/scripts/{,*/}*.js',
                      '&lt;%= config.dist %&gt;/styles/{,*/}*.css',
                      '!&lt;%= config.dist %&gt;/scripts/vendor/*'
                  ]
              },
              uglify: true
          }
      },
  
      // Run some tasks in parallel to speed up build process
      concurrent: {
          server: [
              'copy:styles'
          ],
          test: [
              'copy:styles'
          ],
          dist: [
              'sass',
              'copy:styles',
              'imagemin',
              'svgmin'
          ]
      }
  });
  
  
  grunt.registerTask('serve', function (target) {
      if (target === 'dist') {
          return grunt.task.run(['build', 'connect:dist:keepalive']);
      }
  
      grunt.task.run([
          'clean:server',
          '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',
      'useminPrepare',
      'concurrent:dist',
      'autoprefixer',
      'concat',
      'cssmin',
      'uglify',
      'copy:dist',
      'modernizr',
      'rev',
      'usemin',
      'htmlmin'
  ]);
  
  grunt.registerTask('default', [
      'newer:jshint',
      'test',
      'build'
  ]);
  </code></pre>
  
  <p>};</p>