2014-11-28 11 views
21

Wie kann ich eine Bedingung innerhalb des Gulp-Rohres tun, um an ein anderes Ziel auszugeben.Schluckzustand innerhalb des Rohrs

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

was Art von Ausdrücken, die Sie verwenden möchten? – havenchyk

Antwort

31

Verwenden Sie die 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

Ich schlage vor, Sie Ausdruck, so etwas zu verwenden:

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

Mein Zustand Fall wäre von source.sass, also wie kann ich das tun? –

12

Die Lösung ohne neue Abhängigkeiten:

Der gulp.src Funktion r etzt einen Stream, damit du ihn benutzen kannst;)
Schau dir die gulp docs an.

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

Große Lösung ohne Gulpif, die nicht für mich funktionierte – Tonio

+0

@Tonio, versuchen Sie einfach, eine aktualisierte (von Markus) Version dieses Codes zu verwenden, wenn dieses Problem noch relevant ist. – Niklavr

1

Wenn Sie keine zusätzliche Abhängigkeit hinzufügen möchten, können Sie gute alte Elvis vertrauen (:):

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

oder für mehrere Fälle:

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