Как использовать 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
}