2016-04-16 17 views
1

Ich habe diesen Code so weit:Wie kann ich drei Aufgaben mit Parametern nacheinander ausführen?

gulp.task('make_prod_aa', function() { 
    makeAppHtml(config.srcAalHtml, function() { 
     runSequence(
      'makeTemplate', 
      'make_css_bundle', 
      'rename_css_bundle', 
      'make_js_bundle', 
      'rename_js_bundle', 
      function() { 
       makeAppIndex('index-aa.html'); 
      }); 
    }); 
}); 

Es erlaubt mir, Parameter in zwei Funktionen übergeben und führt die Funktionen und die Aufgaben alles in Ordnung. Jetzt möchte ich Parameter in eine dritte Aufgabe übertragen. Ich mag die config.aaTemplates Parameter, um die Aufgabe können makeTemplate passieren, das hier ist:

gulp.task('makeTemplate', function() { 
    return gulp.src(config.aaTemplates) 
      .pipe(print(function (file) { 
       return "Added file " + file + " to template"; 
      })) 
     .pipe(minifyHTML({ collapseWhitespace: true })) 
     .pipe(templateCache({ standalone: true, root: '/app' })) 
     .pipe(gulp.dest(config.destPartials)) 
     .pipe(gzip(gzip_options)) 
     .pipe(gulp.dest(config.destPartials)); 
}); 

schätzen würden Vorschläge, wie ich das tun kann.

+0

Wenden Sie genau das gleiche Refactoring an, das ich Ihnen in [diese Antwort] (http://stackoverflow.com/questions/36644578#36651822) für Ihre 'makeTemplate' Aufgabe beschrieben habe. Natürlich, wenn Sie das mit jeder Aufgabe in Ihrer 'runSequence()' tun, werden Sie schließlich am Ende mit vielen verschachtelten Callbacks, aka [Callback-Hölle] (http://stackoverflow.com/questions/25098066/) enden. An diesem Punkt ist es wahrscheinlich am besten, etwas wie [async.waterfall() '] (https://github.com/caolan/async#waterfall) zu betrachten. –

Antwort

2

Ich glaube nicht, dass es eine andere Option als die Verwendung von JS-Closure gibt, um alle Aufgaben zu haben, die in einer Sequenz laufen, die dieselbe Konfiguration teilen. Proof

Zum Beispiel:

var config = require('path/to/config'); 

function makAppAppHtml() { 
     runSequence(
      'makeTemplate', 
      'make_css_bundle', 
      'rename_css_bundle', 
      'make_js_bundle', 
      'rename_js_bundle', 
      function() { 
       makeAppIndex('index-aa.html'); 
      }); 
} 

function makeTemplate() { 
    return gulp.src(config.aaTemplates) 
      .pipe(print(function (file) { 
       return "Added file " + file + " to template"; 
      })) 
     .pipe(minifyHTML({ collapseWhitespace: true })) 
     .pipe(templateCache({ standalone: true, root: '/app' })) 
     .pipe(gulp.dest(config.destPartials)) 
     .pipe(gzip(gzip_options)) 
     .pipe(gulp.dest(config.destPartials)); 
    }); 
} 

gulp.task('make_prod_aa', makAppAppHtml); 
gulp.task('makeTemplate', makeTemplate); 

Sowohl makeAppHtml und makeTemplate Zugriff auf Config Objekt haben, weil es im äußeren Bereich definiert wurde, konnte der gleiche Trick, um den Funktionsumfang angewandt werden, für detaillierteres Beispiel empfehle ich JavaScript Garden article.

+0

können Sie über JS Schließung erklären. Ich habe Leute von Closure reden hören, aber ich weiß nichts darüber. Wenn Sie ein Beispiel geben könnten, wäre das wirklich gut. Vielen Dank. – Alan2

Verwandte Themen