2016-10-18 7 views
6

मैं 4 Gulp 3 से उन्नयन कर रहा हूँ, और मैं एक त्रुटि में चल रहा हूँ:gulp-concat और lazypipe के इस संयोजन के बारे में क्या गल्प 4 का उपयोग कर त्रुटि उत्पन्न हो रही है?

The following tasks did not complete: build 
Did you forget to signal async completion? 

मैं समझता हूँ कि यह क्या कह रहा है, लेकिन समझ में नहीं आता क्यों इस कोड यह ट्रिगर कर रहा है।

कार्य पूर्ण होता है या नहीं, कार्य पूर्ण हो जाता है (फ़ाइलों को समेकित किया जाता है और नियत के लिए लिखा जाता है)। Lazypipe के बिना एक ही कोड को निष्पादित करने के परिणामस्वरूप कोई त्रुटि नहीं होती है, और lazypipe के भीतर concatenation को हटाने से भी त्रुटि ठीक होती है।

ऐसी चीज में पूरी चीज लपेटना जो धारा बनाता है (जैसे मर्ज-स्ट्रीम) इस मुद्दे को हल करता है। मुझे लगता है कि गल्प-कॉन्सैट और आलसीपाइप के बीच बातचीत के बारे में कुछ सही ढंग से लौटने से स्ट्रीम को रोक रहा है।

gulp.task('build', function() { 
    var dest = 'build'; 

    var buildFiles = lazypipe() 
     .pipe(plugins.concat, 'cat.js') // Task will complete if I remove this 
     .pipe(gulp.dest, dest); 

    // This works 
    // return gulp.src(src('js/**/*.js')) 
    //  .pipe(plugins.concat('cat.js')) 
    //  .pipe(gulp.dest(dest)); 

    // This doesn't (unless you wrap it in a stream-making function) 
    return gulp.src(src('js/**/*.js')) 
     .pipe(buildFiles()); 
}); 

किसी भी सलाह की सराहना की:

यहाँ (सरलीकृत) काम है!

उत्तर

7

यह known issue है जब lazypipe का उपयोग गल्प 4 के साथ किया जाता है और यह निकट भविष्य में तय नहीं किया जा रहा है। कि इस मुद्दे से उद्धरण:

OverZealous commented on 20 Dec 2015
As of now, I have no intention of making lazypipe work on Gulp 4.

जहां तक ​​मेरा बता सकते हैं इस मुद्दे पर तथ्य यह है कि घूंट 4 का उपयोग करता है async-done जो इस है इसकी धारा समर्थन के बारे में कहने के लिए के कारण होता है:

Note: Only actual streams are supported, not faux-streams; Therefore, modules like event-stream are not supported.

जब आप का उपयोग lazypipe() जो आपको मिलता है वह आखिरी पाइप के रूप में एक स्ट्रीम है जिसमें आपके पास आमतौर पर बहुत सारी संपत्तियां नहीं होती हैं जो गलप में धाराओं के साथ काम करते समय होती हैं। आप खुद के लिए यह देख सकते हैं धाराओं प्रवेश करके:

// console output shows lots of properties 
console.log(gulp.src(src('js/**/*.js')) 
    .pipe(plugins.concat('cat.js')) 
    .pipe(gulp.dest(dest))); 

// console output shows much fewer properties 
console.log(gulp.src(src('js/**/*.js')) 
    .pipe(buildFiles())); 

यह शायद कारण है कि घूंट मानता है दूसरी धारा एक "छद्म-धारा" होने के लिए और जब धारा समाप्त हो गया है सही तरीके से पता नहीं है।

इस बिंदु पर आपका एकमात्र विकल्प किसी प्रकार का कामकाज है। , वैकल्पिक रूप से

gulp.task('build', function(cb) { 
    var dest = 'build'; 

    var buildFiles = lazypipe() 
    .pipe(plugins.concat, 'cat.js') 
    .pipe(gulp.dest, dest); 

    gulp.src(src('js/**/*.js')) 
    .pipe(buildFiles()) 
    .on('end', cb); 
}); 

बताया यह किसी भी .pipe()buildFiles() के बाद ठीक करना चाहिए भी: सबसे आसान तरीके को (जो किसी भी अतिरिक्त संकुल आवश्यकता नहीं है) सिर्फ अपने काम के लिए एक कॉलबैक फ़ंक्शन cb जोड़ने के लिए और 'end' घटना के लिए सुनने है एक है कि वास्तव में gutil.noop() की तरह कुछ भी नहीं करता है:

var gutil = require('gulp-util'); 

gulp.task('build', function() { 
    var dest = 'build'; 

    var buildFiles = lazypipe() 
    .pipe(plugins.concat, 'cat.js') 
    .pipe(gulp.dest, dest); 

    return gulp.src(src('js/**/*.js')) 
    .pipe(buildFiles()) 
    .pipe(gutil.noop()); 
}); 
+0

स्पष्ट और विस्तृत विवरण के लिए धन्यवाद, वास्तव में इसे सराहना करते हैं! – goodforenergy

संबंधित मुद्दे