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

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

Код:

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

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

enter image description here

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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);
});

Ответ 3

Вы использовали формат 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 она будет работать

Ответ 4

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

gulp-uglify генерирует событие error, если не удается минимизировать определенный файл

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

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 }

Ответ 5

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

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/'));
});

Ответ 6

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

Нашел вопрос, используя:

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

Ответ 7

Основная ошибка: Невозможно минимизировать 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()]

Ответ 8

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

Ответ 9

Основываясь на моем ответе здесь:

https://stackoverflow.com/a/52255431/999554

"Терсер" - это новый "углификатор". "uglify-es" больше не поддерживается.

https://www.npmjs.com/package/gulp-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);