2017-10-16 13 views
0

J'ai une tâche gulp svg-sprites en boucle à travers mes Sprites. Certains d'entre eux ont besoin d'être minifiés, donc j'ai un if qui exécute la tâche de minify sur ces sprites.Ajouter une promesse pour charger la tâche avec pourEach

Je voudrais qu'il soit terminé lorsque le forEach est terminé. En ce moment, il est dit «fini» trop tôt. Je suppose que je devrais ajouter une promesse, mais je ne suis pas sûr de savoir comment l'aborder. Aide appréciée.

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

Répondre

0

Je apparemment besoin de pousser mes flux à un tableau de flux et de fusionner tous les cours d'eau à la fin, tout le temps « mise à jour » ma variable de flux lors de la tuyauterie. Je me suis retrouvé avec ceci:

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