web-dev-qa-db-fra.com

gulp-newer vs gulp-changed

Quelles sont les différences entre eux?

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

Il semble que gulp-changed soit plus puissant, car il offre une option

hasChanged: changed.compareLastModifiedTime
45
Frank Fang

J'espère qu'il n'est pas trop tard pour répondre à cette question. J'ai dû les évaluer tous les deux au niveau du code source pour un projet récent, et voici mon point de vue.

gulp-newer

À la base, ce plugin compare l'heure modifiée du fichier source et dest (voir API de nœud ) pour décider si le fichier source est plus récent que le fichier dest ou s'il n'y a pas de fichier dest du tout. Voici le code associé dans le plugin:

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

ravalé

Ce plugin utilise par défaut également l'heure modifiée d'un fichier pour décider lequel passer par le flux

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

mais il va plus loin en offrant une option pour comparer le hachage SHA1 du contenu du fichier:

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

Cette information est bien documentée .

Conclusion

Donc, théoriquement, si vous utilisez par défaut hasChanged: changed.compareLastModifiedTime De gulp-changed, chaque plugin est relativement aussi rapide que l'autre. Si vous utilisez hasChanged: changed.compareSha1Digest De gulp-changed, il est raisonnable de s'attendre à ce que gulp-changed soit un peu plus lent car il crée un hachage SHA1 du contenu du fichier. Je n'ai pas de benchmark mais je suis également intéressé à voir un certain nombre.

Que choisir

gulp-changé, purement à cause du développeur derrière lui (sindresorhus). Si un jour cet homme génial décide qu'il cessera de supporter ses plugins gulp, je pense que j'arrêterai complètement d'utiliser gulp.

Blague à part, cependant, le code source de gulp-changed est gulp-y, tandis que la source de gulp-newer se lit à peu près comme la source d'un autre module de nœud avec beaucoup de promesses. Donc un autre +1 pour gulp-changé :)

ÉNORME ÉDITION

Gulp-changed ne fonctionne qu'avec le mappage source: dest 1: 1. Si vous en avez besoin de plusieurs: 1, par ex. lors de l'utilisation avec gulp concat, choisissez plutôt gulp-newer.

72
Lim H.

Puis-je suggérer gulp-newy dans lequel vous pouvez manipuler le chemin et le nom de fichier dans votre propre fonction. Ensuite, utilisez simplement la fonction comme rappel de la newy(). Cela vous donne un contrôle complet sur les fichiers que vous souhaitez comparer.

Cela permettra des comparaisons 1: 1 ou plusieurs à 1.

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

5
dman

Afin de répondre à cette question, vous devrez comparer le code source des deux plugins.

Il semble que gulp-changed ait plus d'options comme vous l'avez dit, plus utilisé (il téléchargeait plus de temps) et plus de contributeurs, ainsi, il pourrait être plus mis à jour et refactorisé, car il était plus utilisé.

Quelque chose qui peut faire une différence, grâce à leur documentation.

Sur l'exemple, pour gulp-newer, son utilisé comme ceci:

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

Il semble donc qu'une fois cette tâche exécutée, elle ne remarquera que les fichiers qui changent pendant que vous utilisez ce plugin.

Sur gulp-changed, ils disent: "obtiendra uniquement les fichiers modifiés depuis la dernière fois qu'il a été exécuté". Donc, et je n'ai pas essayé cela sur un exemple de travail, ce processus modifié par gulp tous les fichiers et ensuite seulement ceux qui ont été modifiés depuis la dernière exécution, il semble donc qu'il "regardera" toujours tous les fichiers et en interne (hachage md5? Non indice, n'a pas vérifié la source) décide alors qu'un fichier a changé depuis la dernière exécution. Pas besoin d'un observateur pour ça.

Tout cela, ne faisait que lire leur documentation officielle.

Un "test à l'état sauvage" serait le bienvenu!

4
avcajaraville