Как решить эту ошибку минимизации на Gulp?

Я получаю ниже ошибки при выполнении этой команды

gulp.task('minify', function () {
    return gulp
      .src('public/app/js/myapp.bundle.js')
      .pipe(uglify())
      .pipe(gulp.dest('public/app/js/myapp.bundle.min.js'));
});

GulpUglifyError: не удалось минимизировать JavaScript. Причина: SyntaxError: Неожиданный токен: имя (MenuItem) (строка: 1628, col: 18, pos: 53569)

Код в этом месте - это

 setters: [],
 execute: function () {
     class MenuItem {  // <-- line 1628

Что не так?

Ответ 1

UglifyJS в настоящее время не поддерживает структуры EcmaScript 6, такие как классы.

Вероятно, вам сначала нужно будет запустить JavaScript через шаг транспортера или найти минификатор, который знает, что делать с кодом ES6.

Обновление 2017-06-17

Ветка UglifyJS, предназначенная для работы с ES6, теперь публикуется как uglify-es на npm.

Обновление 2018-09-10

terser - это новые uglify-es, uglify-es больше не поддерживается.

При использовании глотки оба npmjs проглатывать-уродовать-эс и npmjs проглатывать-terser пакеты поддерживают краткие.

npm install gulp-terser --save-dev
const gulp = require('gulp');
const terser = require('gulp-terser');

function es(){
  return gulp.src('./src/index.js')
    .pipe(terser())
    .pipe(gulp.dest('./build'))
}

gulp.task('default', es);

Ответ 2

Если вы столкнулись с этой проблемой, и на самом деле вы сделали шаг транспилятора, такой как Babel, убедитесь, что вы включили в ваш файл .babelrc правильный предустановленный Babel. В противном случае Babel просто оставит ваш код как есть.

например.

{
  "presets": ["es2015"]
}