Gulp.js कार्य, src पर लौटें?


132

मैं गपशप करने के लिए नया हूं और उदाहरण सेट-अप के माध्यम से देख रहा हूं। कुछ लोगों के पास निम्नलिखित संरचना है:

gulp.task("XXXX", function() {
    gulp.src("....

अन्य लोगों के पास यह है:

gulp.task("XXXX", function() {
   return gulp.src("....

मैं सोच रहा हूँ कि src पर रिटर्न में क्या अंतर है ??

जवाबों:


158

आपको returnयह इंगित करने के लिए कि कार्य async है। gulp.src()एक स्ट्रीम देता है, इसलिए यह async है।

इसके बिना कार्य प्रणाली को पता नहीं होता कि यह कब समाप्त हुआ। डॉक्स पढ़ें ।


अति उत्कृष्ट! उत्तर सिंद्रे के लिए धन्यवाद। अब एक आकर्षण की तरह चल रहा है। इसे प्यार करना।
बोल्डफैडिजेनटुक

बहुत बढ़िया मैं क्या देख रहा था :)
सेबस्टियन लोरबर

14
क्या इसका मतलब है, कि आपको उपयोग करते समय लौटना चाहिएgulp.src() ? यदि आप वापस नहीं लौटे तो क्या होगा gulp.src()?
21

11
मैं दूसरा @ jbandi - यहाँ पूछने के लिए स्पष्ट प्रश्न है "क्या कभी कोई कारण है जो वापस नहीं आता है gulp.src(..., या क्या हमें हमेशा करना चाहिए?" यह उत्तर अधिक उपयोगी होगा यदि यह उस बिंदु, आईएमओ को संबोधित करता है; वर्तमान में यह पता नहीं है कि ऐसे कार्यों के कई उदाहरण क्यों हैं जो कॉल gulp.src(...करते हैं लेकिन इसे वापस नहीं करते हैं।
मार्क अमेरी

2
@jbandi: यदि आप नहीं करते हैं returnतो निर्भरता प्रणाली एक कार्य शुरू कर सकती है इससे पहले कि उसकी निर्भरता हो। मुझे बहुत सारे कार्यों (ज्यादातर कोड-जनरेट) के साथ एक gulpfile मिला है। क्योंकि मैं स्ट्रीम वापस नहीं कर रहा था, एक आश्रित कार्य पहले से ही फ़ाइल को पढ़ रहा था जबकि इसकी निर्भरता अभी भी निर्माण कर रही थी। मुझे मुसीबत के सभी प्रकार में मिल गया ...
gligoran

37

यदि आपके पास आश्रित कार्य हैं, तो आपको स्वयं को चलाने से पहले कार्यों को पूरा करने के लिए अपने आश्रित कार्यों की प्रतीक्षा करने के लिए स्ट्रीम को वापस करने की आवश्यकता है ।

जैसे

// without return
gulp.task('task1', function() {
    gulp.src('src/coffee/*.coffee')
      /* eg compile coffeescript here */
     .pipe(gulp.dest('src'));
});

gulp.task('task2', ['task1'], function() {
    gulp.src('src/*.js')
      /* eg minfify js here */
     .pipe(gulp.dest('dest'));
});

उस उदाहरण में आप task2 के पूरा होने से पहले task1 को पूरा करने की उम्मीद करते हैं (उदाहरण के लिए कॉफ़ीस्क्रिप्ट या जो भी हो) ... लेकिन जब तक हम रिटर्न नहीं जोड़ते - नीचे दिए गए उदाहरण की तरह - तब वे सिंक्रोनाइज़ नहीं होंगे; और संकलित coffeescript न्यूनतम किया गया नहीं किया जाएगा क्योंकि task2 कार्य 1 को पूरा करने के लिए प्रतीक्षा की है नहीं होगा और इतने की संकलित उत्पादन पर लेने नहीं होगा task1 । इसलिए हमें हमेशा इन परिस्थितियों में वापस आना चाहिए।

// with return
gulp.task('task1', function() {
    return gulp.src('**/*.coffee')
      /* your operations here */
     .pipe(gulp.dest('dest'));
});

gulp.task('task2', ['task1'], function() {
    return gulp.src('**/*.js')
      /* your operations here */
     .pipe(gulp.dest('dest'));
});

संपादित करें: यहां की रेसिपी इसे आगे बताती है। https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md


26

मुझे यह मददगार लगा, यदि आपके पास प्रति कार्य कई धाराएँ हैं। आपको कई धाराओं को संयोजित / मर्ज करने और उन्हें वापस करने की आवश्यकता है।

var gulp = require('gulp');
var merge = require('gulp-merge');

gulp.task('test', function() {
    var bootstrap = gulp.src('bootstrap/js/*.js')
        .pipe(gulp.dest('public/bootstrap'));

    var jquery = gulp.src('jquery.cookie/jquery.cookie.js')
        .pipe(gulp.dest('public/jquery'));

    return merge(bootstrap, jquery);
});

गुल्प्स टास्क डेफिनिशन स्ट्रक्चर का उपयोग कर विकल्प, होगा:

var gulp = require('gulp');

gulp.task('bootstrap', function() {
    return gulp.src('bootstrap/js/*.js')
        .pipe(gulp.dest('public/bootstrap'));
});

gulp.task('jquery', function() {
    return gulp.src('jquery.cookie/jquery.cookie.js')
        .pipe(gulp.dest('public/jquery'));
});

gulp.task('test', ['bootstrap', 'jquery']);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.