2015-04-03 33 views
1

我在gulpfile.js以下任務:如何使多條管線門面在咕嘟咕嘟任務

gulp.task('css', function() { 
    return gulp.src('theme.scss') 
    .pipe(...) 
    .pipe(...) 
    .pipe(...) 
    .pipe(...) 
    .pipe(...) 
    .pipe(...) 
    .pipe(gulp.dest('dist')); 
}); 

,我想所有這些管道移動到一個模塊中,以獲得類似的東西:

gulp.task('css', function() { 
    return gulp.src('theme.scss') 
    .pipe(theme()) 
    .pipe(gulp.dest('dist')); 
}); 

這可能嗎?

+0

你也許可以創建一個單獨的功能,如包裹(),它返回this.pipe(..) .pipe(..),然後在調用時將你的上下文綁定到它。比如'pipe(wrapped()。bind(this))',或類似的東西。現在在我的手機上,但我可以嘗試稍後再玩。 – 2015-04-03 20:09:19

回答

1

lazypipe做到了,我單獨的模塊以這種方式被實現:

module.exports = function() { 
    var pipes = lazypipe() 
    .pipe(...) 
    .pipe(...) 
    .pipe(...) 
    .pipe(...) 
    .pipe(...) 
    .pipe(...); 

    return pipes(); 
}; 
0

我可以想象的最簡單的方法是這樣的:

function theme(stream) { 
    return stream.pipe(less()) 
     .pipe(minify()) 
     .pipe(prefix()) 
} 

gulp.task('less', function() { 
    return theme(gulp.src('theme.less')) 
     .pipe(gulp.dest('public')); 
}) 

(完成與少,B/C吞掉,紅寶石青菜,現在有一些新的接口)。 如果你想成爲靈活,可以爲您在主題功能要管之多:

function theme(stream) { 
    return stream.pipe(minify()) 
     .pipe(prefix()) 
} 

gulp.task('less', function() { 
    return theme(gulp.src('theme.less').pipe(less())) 
     .pipe(gulp.dest('public')); 
}) 

這不是漂亮,你可能會希望它是,但它的交易沒有太多額外的包。