2014-07-27 4 views
7

ich eine Gulp concat Uhr Aufgabe Setup haben einige JS-Dateien zu verketten:Gulp Uhr Concat ignoriert manchmal einige JS-Dateien

var sources = [ 
    'public/js/scriptA.js', 
    'public/js/scriptB.js', 
    'public/js/scriptC.js', 
    'public/js/scriptD.js', 
    'public/js/scriptE.js' 
]; 

gulp.task('main.js', function(){ 
    return gulp.src(sources) 
     .pipe(concat('main.js')) 
     .pipe(gulp.dest('./public/js')); 
}); 

gulp.task('watch', function() { 
    gulp.watch(sources, ['main.js']); 
}); 

ziemlich normal Setup denke ich. Wenn sich eines der Skripts ändert, wird main.js durch Verketten der Skripts in dieser Reihenfolge erstellt. Es funktioniert gut 99% der Zeit.

Aber manchmal, vielleicht zufällig, lässt die concat einfach 1 oder mehr der Dateien aus. Ich werde bearbeiten zum Beispiel, speichern Sie es, dann sehen Sie main.js und es concat'ed nur scriptA, scriptB und scriptE. Es hat C und D ganz weggelassen. Und manchmal ist es vielleicht nur C. Manchmal ist es D. Vielleicht ist es auch A. Es ist nur zufällig. Ich habe nichts mit den Dateien gemacht, die es weggelassen hat. Ich habe es in meinem Editor geöffnet, aber es ist unverändert und nur dort sitzen. Gulp beschließt, es aus irgendeinem Grund manchmal auszulassen.

Die Art, wie ich es behebe, ist einfach zu öffnen, was Skript wurde weggelassen und ein Leerzeichen an das Ende einer zufälligen Zeile oder etwas hinzufügen und speichern Sie es dann, die main.js ist verkettet, wie ich es erwarten würde. Es war nichts falsch mit der Datei. Ich musste es einfach neu speichern.

Ist dies ein außergewöhnlicher Fehler für jedermanns Wissen? Ich konnte nirgendwo Informationen über diesen Fehler finden. Gibt es etwas, was ich tun kann, um dieses Problem zu debuggen oder zu protokollieren, um herauszufinden, wie ich es neu erstellen kann?

Eine Sache, die ich bemerkt habe, war, sagen wir, ich habe scriptC bearbeitet und speichern Sie es, und dann bemerken scriptD fehlte. Wenn ich wieder auf scriptC gehe und es erneut speichere, wird scriptD immer noch nicht verkettet. Ich muss scriptD öffnen und speichern, um es zu zwingen, wieder in die main.js aufgenommen zu werden. Sobald ich das Problem Popup sehe, kann ich es in der Regel auf diese Weise neu erstellen.

Dies passiert in der Regel nur etwa 1 in 20 speichert.

+0

Ihre '' gulp.watch'' bezieht sich auf '' sources.js.main'' ... Ich nehme an, du vereinfachst einfach die Dinge, um '' sources'' zu verwenden, aber du hast einen verpasst? –

+0

Ja, ich korrigiere. Wie ich schon sagte, die Concat funktioniert die meiste Zeit großartig. –

+0

Haben Sie eine Lösung gefunden? Wir sehen das gleiche Problem und es kann manchmal vorübergehend "repariert" werden, indem man die Reihenfolge der Skripte ändert. Definitiv ein Problem irgendwo. –

Antwort

2

Sie könnten das gulp-include-Plugin verwenden, um das Problem loszuwerden. Mit diesem Plugin können Sie Ihre js-Dateien mit speziellen Kommentaren in der Datei main.js einbinden/anfordern.

main.js:

//=require 'public/js/scriptA.js' 
//=require 'public/js/scriptB.js' 
//=require 'public/js/scriptC.js' 
//=require 'public/js/scriptD.js' 
//=require 'public/js/scriptE.js' 

gulpfile.js:

var gulp   = require("gulp"), 
    include  = require("gulp-include"); 

gulp.task("scripts", function() { 

    gulp.src("main.js") 
     .pipe(include()) 
      .on('error', console.log) 
     .pipe(gulp.dest("./public/js")); 

}); 

gulp.task('watch', function() { 
    gulp.watch(sources, ['main.js']); 
}); 

Das Plugin über npm verfügbar: https://www.npmjs.com/package/gulp-include