title: SyntaxError: Unexpected token { in Gruntfile.js
body: <p>I don't manage to configure <em>grunt</em>. I have followed all the steps from Magento2 but I receive this syntax error.</p>
  
  <blockquote>
  <pre><code>grunt    
  Loading "Gruntfile.js" tasks...ERROR
  &gt;&gt; SyntaxError: Unexpected token {
  Warning: Task "default" not found. Use --force to continue.
  
  Aborted due to warnings.
  </code></pre>
  </blockquote>
  
  <p>I have reinstalled both the grunt and the node.js, but it doesn't work.</p>
  
  <p>Has anybody had the same problem?</p>
  
  <p>Below you can see the <code>Gruntfile.js</code> ( that is original) posted.</p>
  
  <p>Is it an error of this file or is there another problem?</p>
  
  <p><strong>Gruntfile.js</strong></p>
  
  <pre class="lang-js prettyprint-override"><code>module.exports = function (grunt) {
      'use strict';
  
      var _ = require('underscore'),
          path = require('path'),
          filesRouter = require('./dev/tools/grunt/tools/files-router'),
          configDir = './dev/tools/grunt/configs',
          tasks = grunt.file.expand('./dev/tools/grunt/tasks/*'),
          themes;
  
      filesRouter.set('themes', 'dev/tools/grunt/configs/themes');
      themes = filesRouter.get('themes');
  
      tasks = _.map(tasks, function(task){ return task.replace('.js', '') });
      tasks.push('time-grunt');
      tasks.forEach(function (task) {
          require(task)(grunt);
      });
  
      require('load-grunt-config')(grunt, {
          configPath: path.join(__dirname, configDir),
          init: true,
          jitGrunt: {
              staticMappings: {
                  usebanner: 'grunt-banner'
              }
          }
      });
  
      _.each({
          /**
           * Assembling tasks.
           * ToDo: define default tasks.
           */
          default: function () {
              grunt.log.subhead('I\'m default task and at the moment I\'m empty, sorry :/');
          },
  
          /**
           * Production preparation task.
           */
          prod: function (component) {
              var tasks = [
                  'less',
                  'autoprefixer',
                  'cssmin',
                  'usebanner'
              ].map(function(task){
                  return task + ':' + component;
              });
  
              if (typeof component === 'undefined') {
                  grunt.log.subhead('Tip: Please make sure that u specify prod subtask. By default prod task do nothing');
              } else {
                  grunt.task.run(tasks);
              }
          },
  
          /**
           * Refresh themes.
           */
          refresh: function () {
              var tasks = [
                  'clean',
                  'exec:all'
              ];
              _.each(themes, function(theme, name) {
                  tasks.push('less:' + name);
              });
              grunt.task.run(tasks);
          },
  
          /**
           * Documentation
           */
          documentation: [
              'replace:documentation',
              'less:documentation',
              'styledocco:documentation',
              'usebanner:documentationCss',
              'usebanner:documentationLess',
              'usebanner:documentationHtml',
              'clean:var',
              'clean:pub'
          ],
  
          'legacy-build': [
              'mage-minify:legacy'
          ],
  
          spec: function (theme) {
              var runner = require('./dev/tests/js/jasmine/spec_runner');
  
              runner.init(grunt, { theme: theme });
  
              grunt.task.run(runner.getTasks());
          }
      }, function (task, name) {
          grunt.registerTask(name, task);
      });
  };
  </code></pre>
  
  <p>Thanks in advance!</p>