2014-06-11 7 views
5

के साथ सशर्त रूप से गल्प-घड़ी को सक्षम करना मूल रूप से मैं अपना कार्य सेट करना चाहता हूं ताकि यदि मैं gulp less --watch करता हूं तो यह देखेगा, अन्यथा केवल बिल्ड करें।गल्प-घड़ी (या कुछ और)

'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 निष्पादित करता है, लेकिन किसी भी फाइल में नहीं होता है: यह क्या मैं अब तक है। यह भी process.exit() आईएनजी से कार्य होने से बचाता है ..

मुझे लगता है मैं या तो कुछ में लपेट, या एक वैकल्पिक तरीका (नहीं gulp-if) का उपयोग करने के लिए है यह सोचते हैं रहा हूँ ..

+0

तो अगर आप चाहते हैं '--watch' है कि पारित करना चाहते हैं + कम स्रोतों को बदलने पर फिर से देखना जारी रखें और फिर निर्माण करें? – jsalonen

+0

@jsalonen बिल्कुल – knownasilya

+0

यहां @ रॉब्रिच के इनपुट प्राप्त करना अच्छा लगेगा :) – 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

मुझे आपके आसपास बिल्कुल काम नहीं मिला, बल्कि यह भी काम करता है। मैं 'पाइप (cli.watch? घड़ी(): gutil.noop()) का उपयोग कर रहा हूँ। इस समाधान के लिए धन्यवाद। – knownasilya

+1

'lazypipe()। पाइप (घड़ी) 'शायद यह भी काम करेगा https://www.npmjs.org/package/lazypipe – mpen

0

ऐसा नहीं है सुरुचिपूर्ण, लेकिन इस NODE_ENV के आधार पर काम करता है (gulp-environments साथ में खींच लिया) जो मैं द्वारा watch के शुरू होने से निर्धारित करने के लिए करना चाहता था (हाँ विकास में, उत्पादन/तैनाती में कोई)। अस्वीकरण: मैं बस का उपयोग कर Gulp (4.0 बीटा ताकि gulp.series काम करता है), तो यह भयानक हो सकता है शुरू कर दिया है, लेकिन यह काम किया हो जाता है .. :-)

 
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(); 
    }); 
} 
संबंधित मुद्दे