Перехват и обработка ошибок Uglify при использовании Gulp

Моя установка Gulp в остальном работает фантастически, но она останавливается, если возникает ошибка с моими файлами JS. Пока Gulp 4 не будет наконец выпущен, мы все застряли, используя далеко не идеальную систему ошибок в Gulp... Итак, как я могу отловить ошибки Uglify?

gulp.task('js', function() {
    return gulp
        .src(inputJS)
        .pipe(sourcemaps.init())
        .pipe(concat('main.js'))
        .pipe(uglify(uglifyOptions))
        .pipe(sourcemaps.write('./maps'))
        .pipe(gulp.dest(outputJS))
});

Согласно документации Uglify, gulp-uglify генерирует событие "ошибка", если не может минимизировать конкретный файл. По возможности объект PluginError будет содержать следующие свойства: fileName, lineNumber, message.

Самое близкое, что я заставил его работать, это: .on('error', function(uglify) { console.error(uglify.message) })), но это заканчивается тем, что вышеуказанная задача Gulp больше не работает.

Изменить: я понимаю, что есть ряд расширений Gulp, которые помогают при обработке ошибок (например, Gulp- Util, Stream-Combiner2, Gulp-Plumber и т. д.), но я не хочу устанавливать совершенно новое расширение только для Uglify (я занимаюсь своим Ошибки Sass просто прекрасны без них).


person Chuck Le Butt    schedule 16.11.2015    source источник
comment
Почему у тебя аватарка из одной из худших серий "Звездного пути"?!   -  person Martin Tournoij    schedule 16.11.2015


Ответы (2)


Кажется, решение было очень простым:

    .pipe(uglify(uglifyOptions).on('error', function(uglify) {
        console.error(uglify.message);
        this.emit('end');
    }))

Почти то, что предложил Джеффва, но нет необходимости в gulp-plumber. Причина, по которой моя попытка остановилась, заключается в том, что задачи Gulp watch ждут, пока не получат end (см.: https://github.com/gulpjs/gulp/issues/259).

person Chuck Le Butt    schedule 16.11.2015
comment
@Chunck Это работает, но ссылка на ошибку — имя файла: 'script.js' в папке /dist. Как узнать, какой файл js перед concat'ing является причиной ошибки? Заранее спасибо. - person Kareem; 05.11.2017

Может gulp-plumber поможет.

var plumber = require('gulp-plumber');

gulp.task('js', function() {
    return gulp
        .src(inputJS)
        .pipe(plumber(function(error) {
            console.error(error.message);
            gulp.emit('finish');
        }))
        .pipe(sourcemaps.init())
        .pipe(concat('main.js'))
        .pipe(uglify(uglifyOptions))
        .pipe(sourcemaps.write('./maps'))
        .pipe(gulp.dest(outputJS))
});

Это должно отлавливать любые выдаваемые ошибки и записывать их в консоль.

person Jeffwa    schedule 16.11.2015