它们之间的区别是什么?
gulp.src(imgSrc)
.pipe(newer(imgDest))
.pipe(imagemin())
.pipe(gulp.dest(imgDest));
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
答案 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仅适用于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
}
答案 2 :(得分:4)
为了回答这个问题,你必须比较两个插件的源代码。
似乎gulp-changed有更多选项,如你所说,更多使用(它下载更多时间)和更多贡献者,因此,它可以更新和重构,因为它被更多地使用。
由于他们的文档,可以产生影响的东西。
在这个例子中,对于gulp-newer,它的用法如下:
gulp.task('default', function() {
gulp.watch(imgSrc, ['images']);
});
因此,似乎一旦此任务正在运行,它将只会注意到在您使用此插件时正在更改的文件。
在改变之后,他们说:“只会获得自上次运行以来发生变化的文件”。所以,我没有在一个工作的例子中尝试这个,gulp-changed proccess所有文件,然后只有自上次执行以来已经更改的文件,所以看起来它总是“看”所有文件和内部(md5哈希?没有线索,没有检查来源)决定文件自上次执行后发生了变化。不需要观察者。
所有这一切,只是阅读他们的官方文件。
非常欢迎“野外考试”!