2014-07-14 31 views
38

Quali sono le differenze tra loro?gulp-newer vs gulp-changed

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)); 

Sembra Gulp-cambiato è più potente, perché fornisce un'opzione

hasChanged: changed.compareLastModifiedTime 

risposta

63

Spero che non sia troppo tardi per rispondere a questa domanda. Ho dovuto valutarli entrambi a livello di codice sorgente per un progetto recente, ed ecco la mia opinione.

gulp-recente

Al centro, questo plugin confronta ora di modifica del file di origine e dest (vedi node API) per decidere se il file di origine è più recente del file dest o se non c'è alcun file dest a tutti . Ecco il codice relativo nel plugin:

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

gulp-cambiato

Questo plugin di default usa anche ora di modifica di un file per decidere quale di passare attraverso il flusso

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

ma va un passo oltre, offrendo la possibilità di confrontare il contenuto hash SHA1 del file:

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

Questa informazione è piacevolmente documented.

Conclusione

Quindi teoricamente parlando, se si utilizza gulp-cambiato di predefinito hasChanged: changed.compareLastModifiedTime, ogni plugin è relativamente veloce come gli altri. Se usi gulp-changed's hasChanged: changed.compareSha1Digest, è ragionevole aspettarsi che gulp-changed sia un po 'più lento perché crea un hash SHA1 del contenuto del file. Non ho fatto un benchmark, ma sono anche interessato a vedere un certo numero.

Quale scegliere

gulp-cambiato, semplicemente perché dello sviluppatore dietro di esso (sindresorhus). Se un giorno quest'uomo fantastico decidesse che smetterà di supportare i suoi plugin, credo che smetterò di usare il sorso del tutto.

Scherzi a parte, però, il codice sorgente di gulp-changed è gulp-y, mentre la sorgente di gulp-newer si legge più o meno come la sorgente di un altro modulo nodo con molte promesse. Così un altro +1 per gulp-cambiato :)

ENORME EDIT

Gulp-cambiato funziona solo con 1: 1 Sorgente: mappatura dest. Se hai bisogno di molti: 1, ad es. quando si usa con gulp concat, scegliere invece gulp-newer.

+0

base i punti, la mia conclusione è opposta, userò gulp-più recente, perché gulp-più recente supporto molti: 1, ma gulp-cambiato manca, mentre gulp-cambiato hashing supporto confronta, ma il confronto temporale è abbastanza buono nel mio caso. –

+0

Dato che la tua modifica è qualche tempo fa, potresti fornire un breve head-up se esiste ancora questo problema con 'gulp-changed'? Voglio dire, il problema si basa su come funziona il plugin e non può mai essere risolto o può e/o ha fatto questo aggiornamento in qualsiasi modo forma o forma (già)? – Anticom

4

Al fine di rispondere a questa domanda si dovrà confrontare il codice sorgente di entrambi i plugin.

Sembra che gulp-changed abbia più opzioni come hai detto, più utilizzato (si scaricava più tempo) e più contributori, quindi, potrebbe essere più aggiornato e refactored, poiché veniva utilizzato di più.

Qualcosa che può fare la differenza, grazie alla loro documentazione.

Sul esempio, per gulp-nuovo, la sua utilizzati in questo modo:

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

Così, sembra che una volta che questa operazione è in esecuzione, noterà solo i file che stanno cambiando, mentre si sta utilizzando questo plugin.

Su gulp-changed, si dice: "otterrà solo i file che sono stati modificati dall'ultima volta che è stato eseguito". Quindi, e non ho provato questo su un esempio funzionante, che gulp-changed ha processato tutti i file e quindi solo quelli che sono stati modificati dall'ultima esecuzione, quindi sembra che "guarderà" sempre a tutti i file e internamente (hash MD5? No indizio, non ha controllato la fonte) decidere mentre un file è cambiato dall'ultima esecuzione. Non ho bisogno di un osservatore per quello.

Tutto ciò, era solo leggendo la loro documentazione ufficiale.

Un "test sul selvaggio" sarebbe molto gradito!

5

Posso suggerire gulp-newy in cui è possibile modificare il percorso e il nome file nella propria funzione. Quindi, usa semplicemente la funzione come callback allo newy(). Questo ti dà il controllo completo dei file che desideri confrontare.

Ciò consentirà 1: 1 o molti a 1 confronti.

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

Grandi cose. Il callback è molto più flessibile rispetto all'utilizzo della configurazione –

Problemi correlati