Часы сантехника Gulp streamqueue sass. Ошибки прерывают задачу

Возникла проблема с заданием gulp с использованием Streamqueue, sass, plumber и просмотром его в конце. Задача состоит в том, чтобы скомпилировать рабочий css-файл из css|scss-файлов поставщиков с моими собственными.

gulp.task('fincss', function () {
    watch([workData.sassSrcFiles, workData.cssVendorSrcFiles], {}, function () {
        var convertFromScssToCssAndConcat =
            gulp.src(workData.sassSrcFiles)
                .pipe(plumber(error))
                .pipe(sass());

        var minifyAndConcatExistingCss =
            gulp.src(workData.cssVendorSrcFiles)
                .pipe(plumber(error));

        return sq({objectMode: true}, minifyAndConcatExistingCss, convertFromScssToCssAndConcat)
            .pipe(concat('final.min.css'))
            .pipe(uglifycss())
            .pipe(gulp.dest(workData.cssDest))
            .pipe(livereload());
    });
});

var error = function (e) {
    console.error('Error in plugin "' + e.plugin + '"');
    console.error('   "' + e.message + '"');
    console.error('   In file "' + e.fileName + '", line "' + e.lineNumber + '".');
    console.log('--------------------------------------');
    console.log(e);
};

Но когда ошибка в файле scss прерывает задачу. И никакие эксперименты с сантехникой, которые есть в инете, мне все равно не помогают. Что-то вроде вставки plumber() перед concat или использования this.emit('end') в обработчике ошибок ничего не делает.

В других моих задачах, таких как

gulp.task('toHtml', function () {
    watch(workData.pugSrcFiles, {}, function (e) {
        message('Start generating template.');
        gulp.src([workData.pugSrcFiles, '!' + workData.pugSrc + '_*.pug'])
            .pipe(plumber(error))
            .pipe(pug({pretty: true}))
            .pipe(gulp.dest(pubDir))
            .pipe(livereload());
    });
});

все работает довольно хорошо и без нарушения задачи.

Помогите, пожалуйста.


person Paul Burilichev    schedule 08.08.2016    source источник


Ответы (1)


Вы можете использовать stream-series вместо streamqueue.

измените файл конфигурации на:

var series = require('stream-series');

gulp.task('fincss', function () {
    watch([workData.sassSrcFiles, workData.cssVendorSrcFiles], {}, function () {
        var convertFromScssToCssAndConcat =
            gulp.src(workData.sassSrcFiles)
                .pipe(plumber({errorHandler: function(error) {
                     convertFromScssToCssAndConcat.emit('end')  // important
                 }}))
                .pipe(sass());

        var minifyAndConcatExistingCss =
            gulp.src(workData.cssVendorSrcFiles)
                .pipe(plumber(error));

        return series(minifyAndConcatExistingCss, convertFromScssToCssAndConcat)
            .pipe(concat('final.min.css'))
            .pipe(uglifycss())
            .pipe(gulp.dest(workData.cssDest))
            .pipe(livereload());
    });

});

person Leon    schedule 19.08.2016
comment
Привет, @leon, спасибо, но я получаю сообщение об ошибке \node_modules\stream-series\index.js:23 e.pipe(pauseStream); TypeError: e.pipe is not a function at node_modules\stream-series\index.js:23:7 at Array.forEach (native) at module.exports node_modules\stream-series\index.js:20:11) at C:\projects\jp\gulpfile.js:83:16 at write (C:\projects\jp\node_modules\gulp-watch\index.js:144:3) at node_modules\gulp-watch\node_modules\vinyl-file\index.js:52:4 at node_modules\gulp-watch\node_modules\vinyl-file\node_modules\graceful-fs\graceful-fs.js:78:16 at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3) - person Paul Burilichev; 20.08.2016
comment
@PaulBurilichev, я не могу знать, что произошло, из журнала ошибок, который вы скопировали здесь. Но stream-series должен уметь работать. Я использовал его в своем проекте, вы можете обратиться к строке 118 github.com/njleonzhang/generator-gulp-ionic/blob/master/ - person Leon; 23.08.2016
comment
@PaulBurilichev, извините за опечатку, return series({objectMode: true}, minifyAndConcatExistingCss, convertFromScssToCssAndConcat) должно быть `вернуть серию (minifyAndConcatExistingCss, convertFromScssToCssAndConcat)` - person Leon; 25.08.2016