2017-10-16 108 views
0

我有一個svg-sprites gulp任務循環通過我的精靈。其中一些需要縮小,所以我有一個if在這些精靈上運行縮小任務。添加承諾吞噬任務與forEach

當forEach完成時,我希望它顯示完成。現在它說「完成」的方式太早。我想我應該添加一個承諾,但我不知道如何處理它。幫助讚賞。

var gulp =  require('gulp'); 
var svgSprite = require('gulp-svg-sprite'); 
var svgmin =  require('gulp-svgmin'); 

gulp.task('svg-sprites', function() { 

    var stream = ''; 

    config.svgSprites.forEach(function (item) { 

    stream = gulp.src(item.src + '/**/*.svg'); 

    if(item.doMinify) { 
     stream.pipe(svgmin({ 
     plugins: [ 
      { 
      removeAttrs: { 
       attrs: ['path:fill', 'g:fill'] 
      } 
      } 
     ] 
     })) 
    } 

    stream.pipe(svgSprite()) 
     .pipe(gulp.dest(normalizePath(item.dest))); 
    }); 

    return stream; 
}); 

回答

0

我顯然需要我的流推送到流的陣列,並且在端部合併所有流,所有的時間「更新」我的流變量時管道。我結束了這個:

var gulp =  require('gulp'); 
var svgSprite = require('gulp-svg-sprite'); 
var svgmin =  require('gulp-svgmin'); 
var merge =  require('merge-stream'); 

gulp.task('svg-sprites', function() { 
    var streams = []; 

    config.svgSprites.forEach(function (item) { 
    var stream = gulp.src(item.src + '/**/*.svg'); 

    if(item.doMinify) { 
     // "Update" stream to be a reference to the output of the task 
     stream = stream.pipe(svgmin({ 
     plugins: [ 
      { 
      removeAttrs: { 
       attrs: ['path:fill', 'g:fill'] 
      } 
      } 
     ] 
     })) 
    } 

    // "Update" stream to be a reference to the output of the task 
    stream = stream.pipe(svgSprite()).pipe(gulp.dest(normalizePath(item.dest))); 

    streams.push(stream); 
    }); 

    return merge.apply(this, streams); 
});