我正在尝试使用类编写一些新的 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 进行缩小时,出现以下错误
'意外的令牌:名称(Utils)',
它对应于第一行中的U ,“class Utils {”。
我知道 uglifyjs2 缩小新的 ES6 标准似乎存在一些问题,但我不知道这是否是问题所在,或者只是我缺少一些语法。我试过 uglifyjs2 和 grunt-contrib-uglify ,我得到了同样的错误。
如果是 ES6 问题,有没有人知道如何正确缩小新的 JS 类的可用解决方案?我尝试在我的 grunt 中使用 Babel (grunt-babel) 将我的代码从 ES6 转换为 ES5,但这实际上并没有改变代码结构。ES5 中类的等价形式是什么?这是我翻译后的代码。
更新
好的。所以我没有在我的 Gruntfile 中安装和加载正确的 Babel 预设和插件。所以我安装了它们,但它仍然无法正常工作。在 Babel 运行时,我收到错误
运行“babel”任务
Running "babel:dist" (babel) task
Verifying property babel.dist exists in config...OK
Files: js/es6/utils.js -> js/es6/utils.new.js
Options: sourceRoot="etc/", sourceMap=false, presets=["babel-preset-es2015"], plugins=["babel-plugin-transform-es2015-classes"]
Warning: Unknown plugin "babel-plugin-transform-es2015-classes" specified in "base" at 0, attempted to resolve relative to "js/es6" Use --force to continue.
这是我的 Gruntfile 配置。我的 node_modules 和 gruntfile 在我的应用程序源文件所在的其他地方。
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 子目录中,向下很多层。
- 树干/
- ETC/
- 节点模块/
- Gruntfile.js
- 包.json
- Python/
- 马文/
- 网络/
- 静止的/
- js/
- es6/
- 实用程序.js
- es6/
- css/
- js/
- 静止的/
- 网络/
- 马文/
- ETC/
如何告诉 babel 配置我的预设/插件在一个目录中,但我的 javascript 文件在另一个目录中?