gulp-newer vs gulp-changed

时间:2014-07-14 05:49:32

标签: npm gulp

它们之间的区别是什么?

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

看来gulp-changed更强大,因为它提供了一个选项

hasChanged: changed.compareLastModifiedTime

3 个答案:

答案 0 :(得分:71)

我希望回答这个问题还为时不晚。我必须在最近的项目的源代码级别对它们进行评估,这是我的看法。

吞掉-较新的

核心,此插件比较源文件和目标文件的修改时间(请参阅node API),以确定源文件是否比dest文件更新,或者根本没有dest文件。以下是插件中的相关代码:

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

吞掉改变的

默认情况下,此插件还会使用文件的修改时间来决定通过流传输哪个

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

但它更进了一步,提供了一个比较文件内容SHA1哈希的选项:

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

这些信息很好documented

结论

从理论上讲,如果你使用gulp-changed的默认hasChanged: changed.compareLastModifiedTime,每个插件的速度都相对较快。如果你使用gulp-changed hasChanged: changed.compareSha1Digest,那么期望gulp-changed变得有点慢是合理的,因为它确实创建了文件内容的SHA1哈希值。我没有基准,但我也有兴趣看到一些数字。

选择哪个

gulp-changed,纯粹是因为它背后的开发人员(sindresorhus)。如果有一天这个可怕的男人决定他会停止支持他的gulp插件,我想我会完全停止使用gulp。

但是,开玩笑说,gulp-changed的源代码是gulp-y,而gulp-newer的源代码读取就像另一个节点模块的来源有很多承诺。所以gulp改变了另一个+1:)

巨大的编辑

Gulp-changed仅适用于1:1源:dest映射。如果你需要很多:1,例如当使用gulp concat时,请选择gulp-newer。

答案 1 :(得分:5)

我建议您gulp-newy在其中操作自己函数中的路径和文件名。然后,只需使用该函数作为newy()的回调。这使您可以完全控制要比较的文件。

这将允许1:1或多对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

答案 2 :(得分:4)

为了回答这个问题,你必须比较两个插件的源代码。

似乎gulp-changed有更多选项,如你所说,更多使用(它下载更多时间)和更多贡献者,因此,它可以更新和重构,因为它被更多地使用。

由于他们的文档,可以产生影响的东西。

在这个例子中,对于gulp-newer,它的用法如下:

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

因此,似乎一旦此任务正在运行,它将只会注意到在您使用此插件时正在更改的文件。

在改变之后,他们说:“只会获得自上次运行以来发生变化的文件”。所以,我没有在一个工作的例子中尝试这个,gulp-changed proccess所有文件,然后只有自上次执行以来已经更改的文件,所以看起来它总是“看”所有文件和内部(md5哈希?没有线索,没有检查来源)决定文件自上次执行后发生了变化。不需要观察者。

所有这一切,只是阅读他们的官方文件。

非常欢迎“野外考试”!