uglifyjs a javascript类-意外的令牌错误

uglifyjs a javascript类-意外的令牌错误,javascript,class,ecmascript-6,uglifyjs2,Javascript,Class,Ecmascript 6,Uglifyjs2,我正在尝试使用类编写一些新的javascript,在尝试使用uglifyjs2缩小代码片段时,出现了一个“'Unexpected token:name(Utils)'”错误 这是我的班级 'use strict'; class Utils { // Constructor constructor() { marvin.Utils = Utils; } // Build a Form buildForm(keys) { v

我正在尝试使用类编写一些新的javascript,在尝试使用uglifyjs2缩小代码片段时,出现了一个“'Unexpected token:name(Utils)'”错误

这是我的班级

'use strict';

class Utils {
    // Constructor
    constructor() {
        marvin.Utils = Utils;
    }

    // Build a Form
    buildForm(keys) {
        var args = Array.prototype.slice.call(arguments, 1);
        var form = {};
        keys.forEach(function(index,key) {
            form[key] = args[index];
        });
        return form;
    }

    // Unique values
    unique(data) {
        return new Set(data);
    }
}
当尝试使用uglifyjs缩小时,我得到以下错误

'意外标记:名称(UTIL)'

它对应于第一行“class Utils{”中的U

我知道uglifyjs2缩小新ES6标准似乎存在一些问题,但我不知道这是问题所在,还是我缺少了一些语法方面的东西。我尝试过uglifyjs2和grunt contrib uglify,但我也遇到了同样的错误

如果是ES6问题,有人知道如何正确缩小新的JS类的可用解决方案吗?我曾尝试在grunt中使用Babel(grunt Babel)将代码从ES6传输到ES5,但实际上根本没有改变代码结构。ES5中类的等效形式是什么?这是我的后传输代码

更新

好的。所以我没有在Grunfile中安装和加载正确的Babel预设和插件。所以我安装了它们,但仍然不起作用。在Babel运行时,我得到了错误

运行“babel”任务

这是我的GrunFile配置。我的node_模块和GrunFile位于应用程序源文件所在的其他位置

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    // Babel - transpiler from ES6 to ES5
    babel: {
        options: {
            sourceRoot: 'etc/',
            sourceMap: false,
            presets: ['babel-preset-es2015'],
            plugins: ["babel-plugin-transform-es2015-classes"]
        },
        dist: {
          files: [{
            expand: true,
            src: ['js/es6/*.js'],
            ext: '.new.js'
          }]
        }
    }
  });
// Set default file path
  grunt.file.setBase('../python/marvin/web/static/');
我的应用程序树是这样的,我在etc/目录中运行grunt。我所有的javascript文件都在js子目录中,从很多级别往下

  • 树干/
    • 等/
      • 节点单元/
      • Grunfile.js
      • package.json
    • 蟒蛇/
      • 马文/
        • 网/
          • 静止的/
            • js/
              • es6/
                • utils.js
            • css/

我如何告诉babel配置我的预设/插件在一个目录中,而我的javascript文件在另一个目录中?

好吧,我通过重组我的目录系统来解决这个问题,使之与我看到的其他示例更加一致。基本上,我的Grunfile、package.json和node_模块与我的源文件位于同一目录级别。他这是我的新结构

  • 树干/
    • 等/
    • 蟒蛇/
      • 马文/
        • 网/
          • 静止的/
            • js/
            • css/
            • src/
            • Grunfile.js
            • package.json
            • 节点单元/
Grunfile文件中的新Babel配置如下所示

babel: {
    options: {
        sourceMap: false,
        presets: ['es2015']
    },
    dist: {
      files: [{
        expand: true,
        cwd: 'src',
        src: ['**/*.js'],
        dest: 'js',
        ext: '.js'
      }]
    }
}

现在一切都可以正常传输了,我可以用uglifyjs适当地缩小。问题肯定是Uglify缺少对ES6类的支持。我已经将您的代码放入在线Babel编译器中,编译后看起来非常不同。也许您没有设置正确的传输器预设。如果您想尝试自己的话,这里有链接lf:是的,似乎我丢失了一些用于传输到es2015的grunt babel插件和预设。我已经添加了它们,但现在我遇到了一个错误,grunt babel无法找到与我的文件所在目录相关的插件/预设。我已经用更多信息更新了上面的主文本try
presets:['es2015']
插件:[“transform-es2015-classes”]
虽然我不知道你为什么需要这个插件。也许我不喜欢预设。无论如何,我会得到相同的“未知插件”错误。如果我完全删除插件,我会得到错误“警告:找不到相对于目录“js/es6”的预设“es2015”,请使用--强制继续。”有了预设。我可以在我的etc/目录中看到插件。不知怎么的,巴贝尔认为主目录是js/es6/,路径都乱了。你是否
npm安装了Babel-preset-es2015-保存开发文件?
babel: {
    options: {
        sourceMap: false,
        presets: ['es2015']
    },
    dist: {
      files: [{
        expand: true,
        cwd: 'src',
        src: ['**/*.js'],
        dest: 'js',
        ext: '.js'
      }]
    }
}