2

我是 gulp 的新手,我尝试按照https://www.npmjs.com/package/gulp-newer中的文档了解它的工作原理。但是,对于以下任务,它没有按预期工作。我想我错过了一些明显的东西。

这是文件夹结构,

    temp
      file1.js
      file2.js
    new
      file1.js
      file3.js
    change
      <empty initially>

我想将临时文件夹与文件夹进行比较,如果新文件夹中有任何新文件之前在 temp 中不存在),则将这些文件移动到更改文件夹。这只是我试图了解 gulp-newer 的工作原理。我做对了吗?

    gulp.task('newer', function() {
        return gulp.src('temp/*.js')
                .pipe(newer('new/*.js'))
                .pipe(gulp.dest('change')) 
        });

但是,当我运行此任务时,它只是将临时文件夹中的所有文件复制到更改文件夹中。所以在任务运行后更改文件夹有file1.js和file2.js。我希望只有 file3.js 出现在更改中(因为那是一个新文件)。如果我对该方法的理解不正确,请纠正我。

4

2 回答 2

3

gulp-newer

使用 newer with many:1 source: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')) 
        });

此外,由于较新检查文件的修改日期,请确保文件实际上是较新的。我知道这很明显,但我通常被困在“明显”的东西上。

于 2016-03-29T19:32:06.757 回答
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
}

在此处输入图像描述

于 2016-05-27T19:32:12.053 回答