Как использовать gulp-newer?

Я новичок в 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 будет присутствовать в изменении (так как это новый файл). Поправьте меня, если мое понимание с подходом неверно.

2 ответа

Из глотка-новее:

Использование более новых сопоставлений source: dest со многими:1 Плагины, такие как 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')) 
        });

Кроме того, поскольку более новые проверяет дату изменения файлов, убедитесь, что файлы действительно новее. Я знаю, что это очевидно, но я обычно застреваю на "очевидных" вещах.

Позвольте мне также предложить 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
}

введите описание изображения здесь

Другие вопросы по тегам