चूंकि आपके कार्य में एसिंक्रोनस कोड हो सकता है, इसलिए आपको अपने कार्य को पूरा करने के बाद (= "async पूर्णता") समाप्त होने पर gulp को संकेत देना होगा।
गुलप 3.x में आप ऐसा किए बिना दूर हो सकते हैं। यदि आपने स्पष्ट रूप से async को पूरा करने का संकेत नहीं दिया है, तो यह माना जाएगा कि आपका कार्य तुल्यकालिक है और जैसे ही यह समाप्त होता है, आपका कार्य पूरा हो जाता है। इस संबंध में गुल 4.x सख्त है। आप के लिए है स्पष्ट रूप से कार्य पूरा होने का संकेत।
आप इसे छह तरीकों से कर सकते हैं :
यह वास्तव में एक विकल्प नहीं है यदि आप केवल कुछ प्रिंट करने की कोशिश कर रहे हैं, लेकिन यह संभवतः सबसे अधिक इस्तेमाल किया जाने वाला एस्किंस पूरा करने वाला तंत्र है क्योंकि आप आमतौर पर गल्प स्ट्रीम के साथ काम कर रहे हैं। यहां आपके उपयोग के मामले के लिए इसका प्रदर्शन करते हुए एक (बल्कि वंचित) उदाहरण दिया गया है:
var print = require('gulp-print');
gulp.task('message', function() {
return gulp.src('package.json')
.pipe(print(function() { return 'HTTP Server Started'; }));
});
यहाँ महत्वपूर्ण हिस्सा return
बयान है। यदि आप स्ट्रीम वापस नहीं करते हैं, तो स्ट्रीम समाप्त होने पर gulp निर्धारित नहीं कर सकता है।
यह आपके उपयोग के मामले के लिए एक बहुत अधिक फिटिंग तंत्र है। ध्यान दें कि अधिकांश समय आपको Promise
स्वयं ऑब्जेक्ट बनाने की आवश्यकता नहीं होगी , यह आमतौर पर एक पैकेज द्वारा प्रदान किया जाएगा (उदाहरण के लिए अक्सर उपयोग किए जाने वाला del
पैकेज रिटर्न)Promise
)।
gulp.task('message', function() {
return new Promise(function(resolve, reject) {
console.log("HTTP Server Started");
resolve();
});
});
एसिंक्स / वेट सिंटैक्स का उपयोग करके इसे और भी सरल बनाया जा सकता है। सभी कार्यों को async
स्पष्ट रूप से एक वादा वापस लौटाएं ताकि निम्नलिखित कार्य भी हो सकें (यदि आपका नोड.जेएस संस्करण इसका समर्थन करता है ):
gulp.task('message', async function() {
console.log("HTTP Server Started");
});
3. कॉलबैक फ़ंक्शन को कॉल करें
यह संभवतः आपके उपयोग के मामले का सबसे आसान तरीका है: अपने तर्क के रूप में अपने कार्य के लिए कॉलबैक फ़ंक्शन स्वचालित रूप से पास हो जाता है। जब आप कर रहे हों तो बस उस फ़ंक्शन को कॉल करें:
gulp.task('message', function(done) {
console.log("HTTP Server Started");
done();
});
यह ज्यादातर उपयोगी है अगर आपको कमांड लाइन टूल को सीधे इनवॉइस करना है क्योंकि कोई नोड नहीं है। जेपी रैपर उपलब्ध है। यह आपके उपयोग के मामले के लिए काम करता है, लेकिन जाहिर है मैं इसकी सिफारिश नहीं करूंगा (विशेषकर चूंकि यह बहुत पोर्टेबल नहीं है):
var spawn = require('child_process').spawn;
gulp.task('message', function() {
return spawn('echo', ['HTTP', 'Server', 'Started'], { stdio: 'inherit' });
});
मैंने इस तंत्र का उपयोग कभी नहीं किया है, लेकिन यदि आप RxJS का उपयोग कर रहे हैं तो यह उपयोगी हो सकता है। यदि आप कुछ प्रिंट करना चाहते हैं तो यह ओवरकिल की तरह है:
var of = require('rxjs').of;
gulp.task('message', function() {
var o = of('HTTP Server Started');
o.subscribe(function(msg) { console.log(msg); });
return o;
});
पिछले एक की तरह मैं इसे संपूर्णता के लिए शामिल कर रहा हूं, लेकिन यह वास्तव में ऐसा कुछ नहीं है जिसका आप उपयोग करने जा रहे हैं जब तक कि आप पहले से ही EventEmitter
किसी कारण से उपयोग नहीं कर रहे हों ।
gulp.task('message3', function() {
var e = new EventEmitter();
e.on('msg', function(msg) { console.log(msg); });
setTimeout(() => { e.emit('msg', 'HTTP Server Started'); e.emit('finish'); });
return e;
});
webpack-stream
। इसका प्रयोग करें: github.com/shama/webpack-stream/issues/…