如何使用gulp-newer?

时间:2016-03-25 15:02:24

标签: gulp gulp-newer

我是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出现在变化中(因为那是一个新文件)。如果我对方法的理解不正确,请纠正我。

2 个答案:

答案 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
}

enter image description here