2014-11-28 18 views
21

Làm cách nào tôi có thể làm điều kiện bên trong ống Gulp để xuất ra một điểm đến khác.Điều kiện Gulp bên trong đường ống

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

gì loại biểu thức bạn muốn sử dụng? – havenchyk

Trả lời

31

Sử dụng 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

tôi đề nghị bạn sử dụng biểu hiện một cái gì đó như thế này:

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

Trường hợp điều kiện của tôi sẽ là từ source.sass, vậy làm thế nào tôi có thể làm điều đó? –

12

Các giải pháp mà không bất kỳ phụ thuộc mới:

Các gulp.src chức năng r eturns một dòng, vì vậy bạn có thể sử dụng nó;)
Nhìn vào 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

Giải pháp tuyệt vời mà không sử dụng gulpif không hoạt động cho tôi – Tonio

+0

@Tonio, chỉ cần thử sử dụng phiên bản cập nhật (bởi Markus) của mã này nếu vấn đề này vẫn còn liên quan. – Niklavr

1

Nếu bạn không muốn thêm bất kỳ phụ thuộc thêm, bạn có thể tin tưởng tốt cũ 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 %>')); 
}); 

Hoặc cho nhiều trường hợp:

.pipe(condition1 ? g.dest(output.css) : gulp.util.noop()) 
.pipe(condition2 ? g.dest(output2.css) : gulp.util.noop()) 
Các vấn đề liên quan