2014-06-11 16 views
5

Về cơ bản tôi muốn thiết lập tác vụ của mình sao cho nếu tôi làm gulp less --watch nó sẽ xem, nếu không thì chỉ cần thực hiện công việc xây dựng. Đây là những gì tôi có cho đến thời điểm này:Bật gulp-watch có điều kiện với gulp-if (hoặc cái gì khác)

'use strict'; 

var gulp = require('gulp'); 
var less = require('gulp-less'); 
var gulpif = require('gulp-if'); 
var watch = require('gulp-watch'); 
var cli = require('minimist')(process.argv.slice(2)); 

gulp.task('less', function() { 
    return gulp.src(['./client/styles/styles.less', './client/styles/libs.less']) 
    .pipe(less({ sourceMap: !cli.production })) 
    .pipe(gulp.dest('./dist/styles')) 
    .pipe(gulpif(cli.watch, watch())); 
}); 

Điều gì xảy ra là nó vẫn thực hiện watch nhưng không vượt qua bất kỳ tệp nào. Điều này cũng ngăn cản công việc từ process.exit() ing ..

Tôi giả định tôi phải hoặc bọc nó trong một cái gì đó, hoặc sử dụng một phương pháp thay thế (không gulp-if) ..

+0

Vì vậy, bạn muốn điều đó nếu '--watch' là thông qua bạn muốn xây dựng + tiếp tục xem và xây dựng lại nếu các nguồn LESS thay đổi? – jsalonen

+0

@jsalonen chính xác – knownasilya

+0

Rất thích nhận dữ liệu nhập của @ robrich tại đây :) – knownasilya

Trả lời

6

gulp-watch là một dòng bất tận, vì vậy nếu được gọi là, nó sẽ không bao giờ cho phép quá trình thoát. Nhiệm vụ của bạn luôn gọi watch() để chuyển nó đến gulpif ngay cả khi không cần đến. Điều này có nghĩa là bạn sẽ chạy một người theo dõi không bị cản trở. Ngoài ra, người quan sát cần phải là người đầu tiên trong chuỗi ống của bạn để nó có thể kích hoạt lại các trình xử lý còn lại.

Những gì bạn cần làm là sử dụng đối số dòng lệnh để gọi và đính kèm theo điều kiện watch(). chạy một nhiệm vụ thực hiện việc xem. Ngoài ra, hãy sử dụng gulp-plumber (https://github.com/floatdrop/gulp-plumber) để giữ luồng hoạt động nếu bạn gặp lỗi sau khi xem.

var plumber = require('gulp-plumber'); 
gulp.task('less', function() { 
    var src = gulp.src(['./client/styles/styles.less', './client/styles/libs.less']); 

    if (cli.watch) { // watch() won't be called without the command line arg 
     src = src.pipe(watch()).plumber(); 
    } 

    return src.pipe(less({ sourceMap: !cli.production })) 
     .pipe(gulp.dest('./dist/styles')); 
}); 
+2

Tôi đã tìm được một công việc xung quanh, không chính xác giống như của bạn nhưng nó cũng hoạt động tốt. Tôi đang sử dụng 'ống (cli.watch? Watch(): gutil.noop())'. Cảm ơn vì giải pháp này. – knownasilya

+1

'lazypipe(). Ống (xem)' có lẽ cũng sẽ làm việc https://www.npmjs.org/package/lazypipe – mpen

0

Không phải như vậy tao nhã, nhưng điều này hoạt động dựa trên NODE_ENV (kéo với gulp-environments) mà tôi muốn xác định bắt đầu watch bằng (có trong sự phát triển, không có trong sản xuất/triển khai). Disclaimer: Tôi chỉ mới bắt đầu sử dụng Gulp (4.0 beta để gulp.series công trình), vì vậy đây có thể là khủng khiếp, nhưng nó được công việc làm .. :-)

 
var environments = require('gulp-environments'); 
var development = environments.development; 
var production = environments.production; 

if (development()) { 
    gulp.task('default', gulp.series('flow', 'babel', 'cleanup', 'watch'), function(done) { 
     done(); 
    }); 
} 
else { 
    gulp.task('default', gulp.series('flow', 'babel', 'compress', 'cleanup'), function(done) { 
     done(); 
    }); 
} 
Các vấn đề liên quan