2014-07-14 10 views
38

Was sind die Unterschiede zwischen ihnen?gulp-neuere vs gulp-geändert

gulp-newer:

gulp.src(imgSrc) 
    .pipe(newer(imgDest)) 
    .pipe(imagemin()) 
    .pipe(gulp.dest(imgDest)); 

gulp-changed:

gulp.src(SRC) 
    .pipe(changed(DEST)) 
    // ngmin will only get the files that 
    // changed since the last time it was run 
    .pipe(ngmin()) 
    .pipe(gulp.dest(DEST)); 

Es scheint Gulp-verändert ist mächtiger, weil es eine Option

hasChanged: changed.compareLastModifiedTime 

Antwort

63

Ich hoffe, es ist nicht zu spät, diese Frage zu beantworten. Ich musste beide auf Quellcode-Ebene für ein aktuelles Projekt evaluieren, und hier ist meine Ansicht.

schluck-neuere

Im Kern vergleicht dieser Plugin der Quelle und dest der Datei geändert Zeit (siehe node API), um zu entscheiden, ob die Quelldatei neuer ist als die dest Datei oder, wenn es keine dest Datei überhaupt . Hier ist der zugehörige Code in das Plugin:

var newer = !destFileStats || srcFile.stat.mtime > destFileStats.mtime; 

schluck-changed

Dieses Plugin verwendet standardmäßig auch eine modifizierte Zeit der Datei, die zu entscheiden, durch den Strom

function compareLastModifiedTime(stream, cb, sourceFile, targetPath) {} 

passieren, aber es geht einen Schritt weiter und bietet eine Option zum Vergleichen des Inhalts der Datei SHA1-Hash:

Diese Information ist nett documented.

Fazit

So theoretisch, wenn Sie den Standard des schluck-verändert verwenden hasChanged: changed.compareLastModifiedTime, jedes Plugin relativ so schnell wie die andere ist. Wenn Sie gulp-changes hasChanged: changed.compareSha1Digest verwenden, ist es vernünftig zu erwarten, dass gulp-change etwas langsamer ist, da es einen SHA1-Hash des Dateiinhalts erzeugt. Ich habe keinen Benchmark erstellt, aber ich bin auch daran interessiert, eine Nummer zu sehen.

Welche

schluck-verändert, rein wegen der Entwickler dahinter (sindresorhus) zu wählen. Wenn dieser tolle Mann eines Tages entscheidet, dass er aufhören wird, seine Schluckplugins zu unterstützen, denke ich, dass ich aufhören werde, Schluck zu konsumieren.

Scherz beiseite, gulp-changed Quellcode ist Schluck-y, während Schluck-neuere Quelle liest so ziemlich wie nur die Quelle eines anderen Knoten-Moduls mit vielen Versprechen. So ein anderer +1 für Schluck-verändert :)

riesig EDIT

Gulp-verändert funktioniert nur mit 1: 1 Quelle: dest Mapping. Wenn Sie viele benötigen: 1, z.B. Wenn Sie mit Schluck-Concat verwenden, wählen Sie stattdessen Schluck-Neuer.

+0

Ihre Punkte Basierend, die meine Schlussfolgerung ist, gegenüber, verwende ich schluck-neuere, weil schluck-neueres Unterstützung viele: 1, aber schlucke-verändert fehlt, während schluck-changed Unterstützung Hash- vergleichen, aber Zeitstempel vergleichen ist in meinem Fall gut genug. –

+0

Da deine Bearbeitung vor einiger Zeit abgeschlossen ist, könntest du bitte einen kurzen Überblick geben, ob dieses Problem mit 'gulp-changed' noch immer besteht? Ich meine, hängt das Problem davon ab, wie das Plugin funktioniert und kann niemals gelöst werden oder kann und/oder hat dieses Update in irgendeiner Form (schon) funktioniert? – Anticom

4

Um stellt diese Frage, die Sie zu beantworten muss den Quellcode beider Plugins vergleichen.

Scheint, dass gulp-changed mehr Optionen hat, wie Sie gesagt haben, mehr verwendet (es wurde mehr Zeit heruntergeladen) und mehr Beitragszahler, so könnte es mehr aktualisiert und refaktoriert werden, wie es mehr verwendet wurde.

Etwas, das aufgrund ihrer Dokumentation einen Unterschied machen kann.

gulp.task('default', function() { 
    gulp.watch(imgSrc, ['images']); 
}); 

scheint also, dass, sobald diese Aufgabe ausgeführt wird, wird es nur Dateien fest, die zu ändern sind, während Sie dieses Plugin verwenden:

Am Beispiel für schluck-neuere, seine so benutzt.

Auf Schluck-geändert, sagen sie: "wird nur die Dateien, die seit der letzten Zeit, die es ausgeführt wurde geändert werden". Also, und ich habe nicht versucht, dies an einem funktionierenden Beispiel, das gulp-changed verarbeitete alle Dateien und dann nur diejenigen, die seit der letzten Ausführung geändert wurden, so scheint es immer auf alle Dateien und intern "schauen" (md5 hash? No Hinweis, nicht die Quelle überprüfen) entscheiden, während eine Datei seit der letzten Ausführung geändert hat. Brauche keinen Beobachter dafür.

All dies, las nur ihre offizielle Dokumentation.

Ein "auf dem wilden Test" wäre sehr willkommen!

5

Darf ich vorschlagen gulp-newy, in dem Sie den Pfad und den Dateinamen in Ihrer eigenen Funktion manipulieren können. Verwenden Sie dann die Funktion als Rückruf für die newy(). Dies gibt Ihnen die vollständige Kontrolle über die Dateien, die Sie vergleichen möchten.

Dies ermöglicht 1: 1 oder viele zu 1 vergleicht.

newy(function(projectDir, srcFile, absSrcFile) { 
    // do whatever you want to here. 
    // construct your absolute path, change filename suffix, etc. 
    // then return /foo/bar/filename.suffix as the file to compare against 
} 

enter image description here

+2

Tolles Zeug. Der Rückruf ist viel flexibler als die Konfiguration –

Verwandte Themen