2015-03-25 19 views
18

चलाता है मैं इस गुलप वॉच नमूना का उपयोग कर रहा हूं: https://github.com/floatdrop/gulp-watch/blob/master/docs/readme.md#starting-tasks-on-eventsगुलप वॉच केवल एक बार

C:\test>gulp watch 
[08:40:21] Using gulpfile C:\test\gulpfile.js 
[08:40:21] Starting 'watch'... 
[08:40:21] Finished 'watch' after 2.69 ms 
[08:40:31] Starting 'build'... 
Working! 
[08:40:31] Finished 'build' after 261 µs 

अगली बार कुछ नहीं होता:

var gulp = require('gulp'); 
var watch = require('gulp-watch'); 
var batch = require('gulp-batch'); 

gulp.task('build', function() { console.log('Working!'); }); 

gulp.task('watch', function() { 
    watch('**/*.js', batch(function() { 
     gulp.start('build'); 
    })); 
}); 

जब मैं अपने विंडोज 8 मशीन पर इसे चलाने, यह केवल पहली बार मैं एक फ़ाइल को बदलने चलाता है। क्यूं कर?

+0

क्या आपने कोई फ़ाइल बदल दी? क्योंकि जब आप गल्प घड़ी निष्पादित करते हैं, तो यह फाइलें देख रहा है। जब आप एक फ़ाइल बदलते हैं, तो घड़ी में फ़ंक्शन निकाल दिया जाता है। – blablabla

+1

हाँ, शायद मैं पर्याप्त स्पष्ट नहीं हूँ। मैं फ़ाइलों को बदल रहा हूं, लेकिन 'घड़ी' केवल पहली बार निष्पादित की जाती है जब मैं एक फ़ाइल बदलता हूं। जैसेअगर मैं 'गल्प घड़ी' शुरू करता हूं, तो मेरी * .js फ़ाइल में कुछ बदलें और इसे सहेजें, देखें चल रहा है। अगर मैं एक ही फाइल में कुछ और बदलता हूं और इसे फिर से सहेजता हूं, तो घड़ी चल रही नहीं है। 'गल्प घड़ी' प्रक्रिया अभी भी चल रही है, लेकिन कुछ भी नहीं होता है। – dhrm

+0

यदि आप अभी भी 'गल्प-बैच' का उपयोग करना चाहते हैं, तो सही उपयोग करना 'किया गया' कॉलबैक होना है: 'done' - बैच के लिए आपके फ़ंक्शन सिग्नल के लिए कॉलबैक है, जो आप कर चुके हैं। तो: 'gulp.task (' watch ', function() { घड़ी (' **/*। जेएस ', बैच (फ़ंक्शन (ईवेंट, किया गया) { gulp.start (' build '); \t किया गया(); })); }); ' – nemesv

उत्तर

13

तुम करीब से दस्तावेज़ पढ़ें, तो आपको निम्न वाक्यांश देखें:

आप सादे कॉलबैक पारित कर सकते हैं, कि हर घटना पर बुलाया जाएगा या घूंट बैच में लपेट चलाने के लिए यह एक बार

तो, यह मूल रूप से gulp-batch के साथ सौदा है। लगातार इसे देखने के लिए, बस बैच कॉल निकालें:

gulp.task('build', function (done) { 
    console.log('Working!'); 
    done(); 
}); 

gulp.task('watch', function() { 
    watch('app/*.js', function() { 
     gulp.start('build'); 
    }); 
}); 

(और build को 'पूर्ण' कॉलबैक जोड़ने Gulp पता है जब आप समाप्त कर जाने के लिए)।

बीटीडब्ल्यू ... मुझे यकीन नहीं है, लेकिन मुझे लगता है कि gulp-watch न केवल फाइलों को देखने के लिए है, बल्कि सीधे एक विनाइल ऑब्जेक्ट को वापस करने के लिए है। तो वास्तव में का उपयोग कर निर्मित gulp.watch ही प्रभाव होना चाहिए:

gulp.task('watch', function() { 
    gulp.watch('app/**/*.js', ['build']); 
}); 
+0

पुरानी पोस्ट लेकिन लीममे ने दोबारा उद्धरण दिया जो @ddprrt ने कहा, ' "(और 'समाप्त' कॉलबैक जोड़ें ताकि गुलप को समाप्त होने पर पता चल सके) "' और लगभग मुझे दीवारों पर घंटों तक अपना सिर मारा। धन्यवाद आदमी – Temitayo

3

मैं एक ही समस्या थी और ddprrt के रूप में ही इस्तेमाल किया। अंतर पूर्ण पथ पर लगाए गए निर्देशिका वाइल्डकार्ड का उपयोग कर रहा था।

gulp.task('watch', function() { 
    gulp.watch('sass/**/*.scss', ['sass']) 
}); 
+1

वही समस्या और एक ही समाधान यहाँ। शायद इस बारे में जिथब पर एक मुद्दा खोलें यह एक अच्छी विचारधारा होगी। –

+1

मुझे एक ही समस्या थी और इसे वाइल्डकार्ड निर्देशिका /**/*.scss जोड़ने में हल किया गया, अब यह काम करता है –

0

यह समस्या मुझे एक सप्ताह के लिए पागल बना दिया:

gulp.task('watch', function() { 
    gulp.watch('sass/shortcutcss/*.scss', ['sass']) 
}); 
इस के लिए

:

मैं इस बदल दिया है। मैंने कोशिश की सभी:

  • जोड़ें किया() - घटना
  • नाम बदलें/टच/साफ लक्ष्य सीएसएस
  • filepaths

लेकिन (इस समस्या को और के लिए कारण) के साथ और अधिक विशिष्ट बनें समाधान इतना आसान था कि मुझे उसके बाद दयनीय महसूस हुआ:

बस update your nodejs installation, मेरा 0.12.x था! कोई आश्चर्य नहीं कि यह काम नहीं करता है।

उसके बाद घड़ी की घटना फिर से काम करती है। कभी-कभी यह फिर भी गलत हो जाता है। लेकिन इस मामले में बस अपनी फ़ाइल को दूसरी बार सहेजें और इसे पहचाना जाए। (मुझे लगता है कि foundation/gulp watch तेजी से परिवर्तनों की जांच करता है और आपकी फ़ाइल को नए अपलोड किए गए एक के साथ प्रतिस्थापित किया जाता है)