2017-09-13 2 views
1

La tâche de gulp que j'ai écrite interrompt runSequence dans ma tâche principale de goulotte. Il doit fonctionner entre d'autres tâches, comme ceci:Comment renvoyer tous les flux à la fois d'une tâche gourmande avec plusieurs fichiers source?

runSequence(
... 
':build:prod:staticIndex', 
':build:prod:typeDocToMD', // << this is my task 
':build:prod:staticDocumentation', 
...etc 

Et la tâche après elle ne sera jamais exécutée. Ce qui me fait penser que ma tâche ne renvoie pas un seul flux ou le fait incorrectement.

Voici comment ma tâche ressemble:

gulp.task(':build:prod:typeDocToMD', (done: any) => { 
let taskNum: number = 0; 
    let streams = []; 
    let filesPath = [ 
    path.join(__CONFIG.TMPL_DOCS_PATH, '**/*.md') 
    ]; 
    glob(filesPath.toString(), function (er, files) { 
    taskNum = files.length - 1; 
    files.forEach((filename) => { 
     let stream = gulp.src(filename) 
     .pipe(addTypedoc()) // << this is the custom plugin I wrote 
     .pipe(gulp.dest(function (file) { 
      return file.base; 
     })); 
     stream.on('end',() => { 
     streams.push(stream); 
     if (streams.length === taskNum) { 
      gUtil.log('the end!'); 
      return merge(streams); 
     } 
     }); 
    }); 
    }); 
}); 

J'utilisé glob pour obtenir récursive tous les fichiers du dossier md. Et j'ai utilisé merge-stream pour combiner tous les flux ensemble et retourner un seul.

Je reçois la «fin! message enregistré mais gulp n'atteint jamais la tâche suivante après cela.

Ai-je raté quelque chose ici?

Merci d'avance pour votre aide!

+1

Vous n'êtes pas familier avec 'merge-stream', mais vous lui transmettez un tableau de flux. Avez-vous essayé 'return merge (... streams)'? – DavidDomain

+0

Merci pour votre réponse, David! Cela n'a pas aidé, mais j'ai trouvé la solution à mon problème (voir ci-dessous). – williwaw

Répondre

0

OK, je viens de trouver une solution à cela, et il est ridiculement simple: utiliser l'argument de rappel de la tâche comme ceci:

if (streams.length === taskNum) { 
    gUtil.log('the end!'); 
    done(); 
} 

Maintenant, ça marche! Et je n'avais même pas besoin d'utiliser merge-stream après tout.