2014-11-28 14 views
21

Come è possibile eseguire una condizione all'interno del tubo Gulp in uscita su una destinazione diversa.Stato della conduttura interna del tubo

g.task('sass', function() { 
    return g.src(sources.sass).pipe(changed(output.css)).pipe(sass({ 
    style: 'compressed', 
    sourcemap: true 
    })).pipe(function() { 
    if (..) { 
     g.dest(output.css); 
    } else { 
     g.dest(output.css2); 
    } 
    }).pipe(notify('scss converted to css and 
compressed 
<%=f ile.relative %>')); 
}); 
+0

cosa tipo di espressioni che desideri utilizzare? – havenchyk

risposta

31

Utilizzare il gulp-if plugin:

var gulpif = require('gulp-if'); 

g.task('sass', function() { 
    return g.src(sources.sass) 
     .pipe(changed(output.css)) 
     .pipe(sass({style:'compressed', sourcemap:true})) 

     // Conditional output 
     .pipe(gulpif(condition1, g.dest(output.css))) 
     .pipe(gulpif(condition2, g.dest(output.css2))) 

     .pipe(notify('scss converted to css and compressed <%= file.relative %>')); 
}); 
4

vi consiglio di usare l'espressione qualcosa di simile:

g.task('sass', function(){ 
    var destinationFileName; 

    if (...) { 
    destinationFileName = 'output.css'; 
    } else { 
    destinationFileName = 'output2.css'; 
    } 

    return g.src(sources.sass) 
    .pipe(changed(output.css)) 
    .pipe(sass({style:'compressed', sourcemap:true})) 
    .pipe(g.dest(destinationFileName)) 
    .pipe(notify('scss converted to css and compressed <%= file.relative %>')); 
}); 
+1

Il mio caso sarebbe da source.sass, quindi come posso farlo? –

12

La soluzione senza nuove dipendenze:

Il gulp.src funzione r crea uno stream, quindi puoi usarlo;)
Guarda lo gulp docs.

gulp.task('task', function() { 
    let stream = gulp.src(sources.sass) 
    .pipe(changed(output.css)).pipe(sass({ 
     style: 'compressed', 
     sourcemap: true 
    })); 

    if (2 + 2 === 4) { 
    stream = stream 
     .pipe(someModule()) 
     .pipe(someModule2()); 
    } 

    else { 
    stream = stream 
     .pipe(someModule3()) 
     .pipe(someModule4()); 
    } 

    stream = stream.pipe(notify('scss converted to css and compressed')); 

    return stream; 
}); 
+0

Ottima soluzione senza l'utilizzo di gulpif che non funzionava per me – Tonio

+0

@Tonio, basta provare ad utilizzare una versione aggiornata (di Markus) di questo codice se questo problema è ancora rilevante. – Niklavr

1

Se non si desidera aggiungere qualsiasi dipendenza in più, ci si può fidare buon vecchio Elvis (:):?

g.task('sass', function() { 
    return g.src(sources.sass) 
    .pipe(changed(output.css)) 
    .pipe(sass({style:'compressed', sourcemap:true})) 

    // Conditional output 
    .pipe(condition ? g.dest(output.css) : g.dest(output.css2)) 

    .pipe(notify('scss converted to css and compressed <%= file.relative %>')); 
}); 

O per i casi più:

.pipe(condition1 ? g.dest(output.css) : gulp.util.noop()) 
.pipe(condition2 ? g.dest(output2.css) : gulp.util.noop())