2017-10-16 102 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); 
});