Search code examples
javascriptgruntjsecmascript-6babeljsgrunt-babel

grunt-babel hangs and doesn't return error message


I am trying to compile my es6 to es5 with grunt-babel. When I enter grunt babel into the command line, it hangs and never runs babel. It doesn't return an error or crash it just hangs. I have other tasks in my Gruntfile.js and they run just fine, so the structure of the Gruntfile.js is correct.

Here is my Gruntfile:

'use strict';

module.exports = function(grunt) {
  require('load-grunt-tasks')(grunt);

  // initialize Grunt
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    'babel': {
      options: {
        sourceMap: true,
        presets: ['babel-preset-es2015']
      },
      dist: {
        files: {
          'js/survey.js': 'build/survey.js'
        }
      }
    },
    // create jshint task
    jshint: {
      dev: {
        // tell jshint what check
        src: ['Gruntfile.js', 'server.js', 'js/**/*.js', 'models/**/*.js', 'routes/**/*.js', '!build/**', '!tests/client/bundle.js', '!tests/karma_tests/bundle.js', '!js/imageMapResizer.min.js', '!js/kickstart.js', '!js/form-validator.js', '!js/imageMapResizer.js', '!js/jquery-ui.min.js', '!js/jquery.base64.js', '!js/kickstart.js'],
        options: {
          node: true,
          globals: {
            describe: true,
            it: true,
            before: true,
            after: true,
            beforeEach: true,
            afterEach: true,
            res: true
          }
        }
      },

      mocha: {
        // tell mocha where test files are
        src: ['tests/test_entry.js', '!tests/client/bundle.js', '!tests/karma_tests/bundle.js'],
        options: {
          node: true,
          globals: {
            describe: true,
            it: true,
            before: true,
            after: true,
            beforeEach: true,
            afterEach: true,
            res: true,
            expect: true
          }
        }
      },
      jasmine: {
        src: ['<%= jshint.dev.src %>', '<%= jshint.mocha.src %>'],
        options: {
          node: true,
          jasmine: true,
          globals: {
            describe: true,
            it: true,
            before: true,
            after: true,
            beforeEach: true,
            afterEach: true,
            expect: true,
            react: true
          }
        }
      },

      // create jscs task
      jscs: {
        dev: {
          // tell jscs to test the same files as jshint
          src: ['<%= jshint.dev.src %>', '<%= jshint.mocha.src %>']
        }
      }
    },

    mocha: {
      // tell mocha where the test file is
      src: ['tests/test_entry.js'],
      options: {
        node: true,
        globals: {
          describe: true,
          it: true,
          before: true,
          after: true,
          beforeEach: true,
          afterEach: true,
          res: true,
          expect: true
        }
      }
    },

    // create simplemocha task
    simplemocha: {
      dev: {
        src: ['tests/test_entry.js']
      }
    }
  });

  // register linting task
  grunt.registerTask('lint', ['jshint:dev', 'jshint:mocha', 'jshint:jasmine']);
  // register mocha test task
  grunt.registerTask('test', ['simplemocha:dev']);
  grunt.registerTask('babel', ['babel']);
  grunt.registerTask('default', ['test']);
};

Here is my package.json:

{
  "name": "event_site_bootstrap",
  "version": "0.1.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "mocha tests/test_entry.js",
    "start": "node server.js"
  },
  "author": "",
  "license": "MS-PL",
  "dependencies": {
    "bcrypt-nodejs": "latest",
    "body-parser": "^1.15.0",
    "cookie-parser": "^1.4.1",
    "dotenv": "^1.2.0",
    "eat": "^0.1.1",
    "express": "^4.13.4",
    "flash": "^1.1.0",
    "jquery": "^2.2.1",
    "multer": "^1.1.0",
    "passport": "^0.3.2",
    "passport-http": "^0.3.0",
    "sequelize": "^3.19.3",
    "sequelize-encrypted": "^0.1.0",
    "tedious": "^1.13.2"
  },
  "devDependencies": {
    "babel-cli": "^6.7.5",
    "babel-core": "^6.7.6",
    "babel-polyfill": "^6.7.4",
    "babel-preset-es2015": "^6.6.0",
    "babylon": "^6.7.0",
    "chai": "^3.2.0",
    "chai-http": "^1.0.0",
    "cli-color": "^1.1.0",
    "colors": "^1.1.2",
    "expect": "^1.9.0",
    "grunt": "^0.4.5",
    "grunt-babel": "^6.0.0",
    "grunt-cli": "^0.1.13",
    "grunt-contrib-jshint": "^0.11.3",
    "grunt-jscs": "^2.1.0",
    "grunt-mocha-cli": "^2.0.0",
    "grunt-simple-mocha": "^0.4.0",
    "load-grunt-tasks": "^3.5.0",
    "mocha": "^2.3.4"
  }
}

And .babelrc looks like this:

{
  "presets": ["es2015"]
}

I've been trying to figure this out since yesterday, but without an error message it's been difficult to know what the problem is. I am using babel as a string, but I have tried without the quotation marks too and it acted exactly the same. I have also tried adding presets: ['babel-preset-es2015'] to the options under 'babel' but it didn't change anything.

Any help would be greatly appreciated, let me know if you need more info or want to see other files. Thanks in advance for all the help!


Solution

  • Found it! Remove the line

    grunt.registerTask('babel', ['babel']);
    

    It causes an infinite loop. You already have a task called babel, so that line just redefines it with an infinite task.

    Also you might want 'js/survey.js': 'build/survey.js' to be 'build/survey.js': 'js/survey.js'. The format is target: source