我是gulp的新手,我试图按照https://www.npmjs.com/package/gulp-newer中的文档来了解它的工作原理。然而,它不能像以下任务那样工作。我想我错过了一些明显的东西。
这是文件夹结构,
temp
file1.js
file2.js
new
file1.js
file3.js
change
<empty initially>
我想将 temp 文件夹与 new 文件夹进行比较,以及 new 文件夹中是否有任何新文件(temp中不存在)之前)然后移动这些文件来更改文件夹。这只是我试图了解gulp-newer如何运作。我做得对吗?
gulp.task('newer', function() {
return gulp.src('temp/*.js')
.pipe(newer('new/*.js'))
.pipe(gulp.dest('change'))
});
但是,当我运行此任务时,它只是将 temp 文件夹中的所有文件复制到更改文件夹。所以在任务运行后更改文件夹有file1.js和file2.js。我期待只有file3.js出现在变化中(因为那是一个新文件)。如果我对方法的理解不正确,请纠正我。
答案 0 :(得分:3)
来自gulp-newer:
使用更新的:1源:dest映射插件,如gulp-concat 获取许多源文件并生成单个目标文件。在这 例如,较新的流将通过所有源文件(如果有的话) 它们比目标文件更新。较新的插件是 使用目标文件路径配置。
和示例代码:
var gulp = require('gulp');
var newer = require('gulp-newer');
var concat = require('gulp-concat');
// Concatenate all if any are newer
gulp.task('concat', function() {
// Add the newer pipe to pass through all sources if any are newer
return gulp.src('lib/*.js')
.pipe(newer('dist/all.js'))
.pipe(concat('all.js'))
.pipe(gulp.dest('dist'));
});
似乎您需要将已经连接的所有文件传递给更新的文件。在你的情况下:
gulp.task('newer', function() {
return gulp.src('temp/*.js')
.pipe(newer('new/*.js'))
.pipe(concat('*.js'))
.pipe(gulp.dest('change'))
});
此外,由于较新的检查文件修改日期,请确保文件实际上更新。我知道这很明显,但我经常坚持“明显”的东西。
答案 1 :(得分:1)
我还建议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
}