2014-11-28 15 views
21

Jak mogę zrobić warunek wewnątrz rury Gulp, aby wyprowadzić do innego miejsca docelowego.Stan łyka wewnątrz rury

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

co typ wyrażeń, których chcesz użyć? – havenchyk

Odpowiedz

31

Użyj gulp-if wtyczki:

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

Proponuję użyć czegoś ekspresji takiego:

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

Mój przypadek stanu będzie pochodził z source.sass, więc jak mogę to zrobić? –

12

roztwór bez żadnych nowych zależności:

gulp.src funkcja r dodaje strumień, więc możesz go użyć;)
Spójrz na 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

Doskonałe rozwiązanie bez użycia gulpif, które nie działało dla mnie – Tonio

+0

@ Tonio, po prostu spróbuj użyć zaktualizowanej wersji Markusa, jeśli ten problem jest nadal aktualny. – Niklavr

1

Jeśli nie chcesz dodawać żadnych dodatkowych zależność można zaufać stare dobre Elvisa (:):

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

lub do wielu przypadków:

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