Можете ли вы gulp очистить все файлы в каталоге, за исключением одного файла?

Есть ли способ использовать gulp -clean, чтобы вместо передачи в файлы или каталоги, которые я хочу удалить, удалить все, что не соответствует определенному имени файла в каталоге?

Например, если у меня есть 3 файла в каталоге "dir":

dir/a.js
dir/b.js
dir/c.js

Пример Pseudocode того, что я хочу сделать (удалить все в /dir/thats not a.js:

gulp.src('!./dir/a.js').pipe(clean());

Ответы

Ответ 1

Это должно работать:

var gulp = require('gulp');
var del = require('del');

gulp.task('clean', function(cb) {
    del(['dir/**/*', '!dir/a.js'], cb);
});

Если исключенный файл находится в подкаталоге, вам нужно исключить этот файл из удаления. Например:

del(['dir/**/*', '!dir/subdir', '!dir/subdir/a.js'], cb);

или

del(['dir/**/*', '!dir/subdir{,/a.js}'], cb);

Ответ 2

gulp-filter можно использовать для фильтрации файлов из потока gulp:

var gulp = require('gulp');
var filter = require('gulp-filter');

gulp.src('**/*.js')
    .pipe(filter(['*', '!dir/a.js']))
    .pipe(clean());