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!
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