Я пытаюсь написать новый javascript, используя классы, и получаю сообщение об ошибке «Неожиданный токен: имя (Utils)» при попытке минимизировать фрагмент кода с помощью uglifyjs2.
вот мой класс
'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? Я пытался использовать Babel (grunt-babel) в моем grunt для переноса моего кода из ES6 в ES5, но на самом деле это вообще не изменило структуру кода. Какова эквивалентная форма класса в ES5? Это мой посттранспилированный код.
Обновить
В порядке. Поэтому у меня не было установленных и загруженных в мой Gruntfile правильных пресетов и плагинов 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/');
Мое дерево приложений выглядит так, и я запускаю grunt внутри каталога etc/. Все мои файлы javascript находятся внутри подкаталога js на много уровней ниже.
- trunk/
- etc/
- node_modules/
- Gruntfile.js
- пакет.json
- python/
- marvin/
- web/
- static/
- js/
- es6/
- utils.js
- es6/
- css/
- js/
- static/
- web/
- marvin/
- etc/
Как я могу сообщить конфигурации babel, что мои пресеты/плагины находятся в одном каталоге, а файлы javascript — в другом?
presets: ['es2015']
иplugins: ["transform-es2015-classes"]
, хотя я не уверен, зачем вам вообще нужен плагин. - person TAGraves   schedule 13.04.2016npm install babel-preset-es2015 --save-dev
? - person Savitoj Cheema   schedule 13.04.2016