1

我正在尝试使用 grunt-babel 将我的 es6 编译为 es5。当我进入grunt babel命令行时,它挂起并且从不运行 babel。它不会返回错误或崩溃,它只是挂起。我的 Gruntfile.js 中有其他任务,它们运行得很好,所以 Gruntfile.js 的结构是正确的。

这是我的 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']);
};

这是我的 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"
  }
}

.babelrc 看起来像这样:

{
  "presets": ["es2015"]
}

从昨天开始,我一直在尝试解决这个问题,但是如果没有错误消息,很难知道问题出在哪里。我使用 babel 作为字符串,但我也尝试过不带引号,它的行为完全相同。我也尝试添加presets: ['babel-preset-es2015']到下面的选项,'babel'但它没有改变任何东西。

任何帮助将不胜感激,如果您需要更多信息或想查看其他文件,请告诉我。提前感谢所有帮助!

4

1 回答 1

5

找到了!删除线

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

它会导致无限循环。您已经有一个名为 的任务babel,因此该行只是用无限任务重新定义它。

你也可能想'js/survey.js': 'build/survey.js'成为'build/survey.js': 'js/survey.js'. 格式是target: source

于 2016-04-12T19:45:10.200 回答