2014-06-11 3 views
5

기본적으로 내 작업을 설정하여 gulp less --watch을 보게됩니다. 그렇지 않으면 빌드 만 수행합니다.gulp-watch를 gulp-if (또는 다른 것)로 조건부로 사용 가능하게 설정

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

무엇을 어떻게하는 것이 여전히 watch를 실행하는, 그러나 모든 파일을 전달하지 않습니다 : 이것은 내가 지금까지있는 것입니다. 이것은 또한 내가 뭔가를 포장, 또는 다른 방법 (안 gulp-if)를 사용하는 것 중 하나가 있으리라 믿고있어

.. process.exit() ING에서 작업을 방지 ..

+0

그래서 당신이 원하는 .. :-) 난 그냥, 그래서 이것은 끔찍한 수 있습니다 꿀꺽 (gulp.series 작품 있도록 4.0 베타)를 사용하기 시작하지만, 일을 얻는'--watch' 인 경우 그 지나가는 소스가 바뀌면 빌드를 계속하고 다시 시청하고 빌드하십시오. – jsalonen

+0

@jsalonen 정확히 – knownasilya

+0

@ robrich의 입력을 여기에 보내고 싶습니다. :) – knownasilya

답변

6

gulp-watch 그래서, 끝없는 스트림이라고하면 프로세스를 종료 할 수 없습니다. 귀하의 작업은 gulpif으로 전달하기 위해 항상 watch()으로 전화합니다. 즉, 연결되지 않은 감시자가 실행됩니다. 또한 관측자는 파이프 체인의 첫 번째가되어야하므로 나머지 핸들러를 다시 트리거 할 수 있습니다.

명령 줄 인수를 사용하여 조건부로 호출하고 watch()을 첨부하면됩니다. 보고있는 작업을 실행하십시오. 또한 감시자 다음에 오류가있는 경우 스트림을 계속 작동 시키려면 gulp-plumber (https://github.com/floatdrop/gulp-plumber)을 사용하십시오.

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

나는 너의 것과 비슷한 것을 발견했지만 잘 작동한다. 나는'pipe (cli.watch? watch() : gutil.noop())'를 사용하고있다. 이 솔루션에 감사드립니다. – knownasilya

+1

'lazypipe(). pipe (watch)'는 아마도 https://www.npmjs.org/package/lazypipe에서도 동작 할 것입니다. – mpen

0

너무 우아하지,하지만이는 NODE_ENV에 따라 작동합니다 (예 개발, 아니 제작/배포) I에 의해 watch의 시작을 결정하고 싶어하는 (gulp-environments으로 당겨). 면책 조항 :

 
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(); 
    }); 
}