2017-10-16 29 views
0

私はsvg-sprites gulpタスクをスプライトでループしています。それらのうちのいくつかは、縮小される必要があるので、私はifこれらのスプライトで縮小タスクを実行しています。forEachでgulpタスクに約束を追加

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); 
}); 
関連する問題