GulpUglifyError: невозможно минимизировать JavaScript

Я пытаюсь минимизировать свои файлы сценариев, для которых я использую средство запуска задач gulp, и я пытаюсь использовать плагин gulp-uglify.

Код:

 gulp.task('concat', function() {
    return gulp.src('app/**/*.js')
        // .pipe(concat('script.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist/'))
});

но я получаю ошибку как

введите описание изображения здесь

когда я пытаюсь запустить задачу gulp как gulp concat Любая помощь будет оценена


person swathi anupuram    schedule 10.11.2016    source источник
comment
Возможный дубликат Как решить эту ошибку минификации в Gulp?   -  person Drew Noakes    schedule 12.02.2017


Ответы (8)


Основная ошибка возникает при использовании формата ES6. Используйте модуль gulp-uglify-es вместо gulp-uglify, чтобы преодолеть эту ошибку.

var uglify = require('gulp-uglify-es').default;

Примечание: gulp-uglify-es больше не поддерживается. Вместо этого вы можете использовать terser/gulp-terser:

person haouarin    schedule 14.05.2018
comment
Большое спасибо! Это должен быть принятый ответ. - person skolind; 24.07.2018
comment
Ошибка: не удается найти модуль gulp-uglify-es. - person juFo; 07.09.2018
comment
@juFo вы установили пакет. npm install gulp-uglify-es --save-dev - person sonali; 07.09.2018
comment
Глоток Терсер FTW - person Oneezy; 09.08.2019
comment
Ты только что спас меня после нескольких часов таскания за волосы. Большое спасибо! - person Arboreal Shark; 22.02.2021

Чтобы увидеть ошибку в консоли:

var gutil = require('gulp-util');

gulp.task('concat', function() {
return gulp.src('app/**/*.js')
    // .pipe(concat('script.js'))
    .pipe(uglify())
    .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); })
    .pipe(gulp.dest('./dist/'))
});

Чтобы найти точный файл с номером строки ошибки, зарегистрируйтесь и запустите эту задачу:

var pump = require('pump');

gulp.task('uglify-error-debugging', function (cb) {
  pump([
    gulp.src('app/**/*.js'),
    uglify(),
    gulp.dest('./dist/')
  ], cb);
});
person Mahbubur Rahman    schedule 14.05.2017
comment
pump спас жизнь, чтобы определить одну строку в моем коде с синтаксисом ES6. Спасибо! - person awe; 03.01.2020
comment
Спасатель жизни! Работает отлично - person Marcos Mendes; 25.01.2021

Я думаю, что лучшие ответы здесь не объясняют, как получить ошибку. В документах есть раздел по обработке ошибок:

gulp-uglify выдает событие «ошибка», если не может минимизировать определенный файл

Итак, просто зафиксируйте ошибку и сделайте с ней все, что хотите (например, войдите в консоль), чтобы увидеть имя файла, номер строки и дополнительную информацию:

uglify().on('error', console.error)

или в более широком контексте:

gulp.task('foo', () => {

    return gulp.src([
        'asset/src/js/foo/*.js',
        'asset/src/js/bar/*.js',
    ])
    .pipe(uglify().on('error', console.error))
    .pipe(concat('bundle.js'))
    .pipe(gulp.dest('./'));

});

Это дает вам супер полезную ошибку!

{ GulpUglifyError: unable to minify JavaScript
    at [stack trace])
  cause:
   { SyntaxError: Continue not inside a loop or switch
       [stack trace]
     message: 'Continue not inside a loop or switch',
     filename: 'ProductForm.js',
     line: 301,
     col: 37,
     pos: 10331 },
  plugin: 'gulp-uglify',
  fileName:
   '/asset/src/js/foo/ProductForm.js',
  showStack: false }
person Charlie Schliesser    schedule 25.01.2019
comment
Это именно то, что мне нужно. Ошибка исходила даже не из файла, который я сохранял! Благодарю вас! - person disinfor; 23.05.2019
comment
Вот и все! Благодарю вас! - person Marcos Mendes; 19.06.2020
comment
Это помогло мне исправить ошибку SyntaxError: Unexpected token: operator «>», потому что она еще не знает, как обрабатывать функции стрелок :) спасибо :) - person jave.web; 27.10.2020
comment
этот не дает мне эту полезную ошибку. тем не менее я получаю stackoverflow.com/questions/68274224/ - person NoStressDeveloper; 06.07.2021

Использовали ли вы формат ES6 в файле скрипта? Если это так, попробуйте ES5 сейчас, потому что, когда вы выполняете gulp-uglify, он не понимает формат ES6 на данный момент, а после этого попробуйте свой код.

 gulp.task('concat', function() {
    return gulp.src('app/**/*.js')
        .pipe(concat('script.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist/'))
});

и запусти задачу gulp concat она будет работать

person Shikha thakur    schedule 10.11.2016
comment
Я внезапно столкнулся с этой ошибкой и понятия не имел, пока не увидел ваше упоминание о ES5 и ES6 и не понял, что я скопировал и вставил некоторый код, например () =>, и как только я верну его к функции ES5, он снова работает. Спасибо! - person newman; 07.03.2017
comment
это действительно совсем облом. это была открытая проблема на github в течение 3 лет. uglify должен уметь обрабатывать ES6, нам не нужно транспилировать толстые стрелочные функции только для целей минимизации. - person Stephen Tetreault; 17.06.2017

Для меня это была устаревшая опция «preserveComments», которая генерировала ошибку (и полностью приводила к сбою скрипта).

Нашел проблему с помощью:

gulp.task('concat', function() {
return gulp.src('app/**/*.js')
    .pipe(uglify())
    .on('error', function (err) { console.log( err ) })
    .pipe(gulp.dest('./dist/'))
});
person Fred    schedule 20.09.2018

Попробуйте использовать это

var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var minifyJS = require('gulp-minify');

gulp.task('concat', function() {
    return gulp.src('app/**/*.js')
        .pipe(minifyJS())
        .pipe(concat('bundle.min.js'))
        .pipe(uglify({ mangle: false }))
        .pipe(gulp.dest('./dist/'));
});
person Sujithrao    schedule 10.11.2016

у вас может быть синтаксическая ошибка или вы использовали синтаксис ES6. вы можете сначала попробовать https://skalman.github.io/UglifyJS-online/.

person Ajai    schedule 29.01.2018

Основная ошибка, связанная с невозможностью минимизации JavaScript, заключается в том, что путь не найден. Можно использовать задание usemin Для этого нужно:

$ sudo npm install gulp-usemin --save-dev
$ sudo npm install gulp-livereload --save-dev
$ sudo npm install gulp-util --save-dev

и требует:

var usemin = require('gulp-usemin');
var livereload = require('gulp-livereload');
var gutil = require('gulp-util'); //gutil for error display

gulp.task('usemin',['jshint'], function(){
    return gulp.src('./app/index.html')
    .pipe(usemin({
        css: [minifycss(),rev()],
        scripts: [uglify().on('error', function(err) {gutil.log(gutil.colors.red('[Error]'), err.toString());this.emit('end');}),rev()]
    })) 
    .pipe(gulp.dest('dist'))
    .pipe(livereload());
});

Change the js: [uglify(), rev()] to scripts: [uglify(), rev()]
person Bipin Shilpakar    schedule 01.06.2017