Gulp Globbing за исключением файлов, затем исключая не работает, как описано
Если у меня есть файлы
client/
a.js
bob.js
bad.js
И глоток
gulp.task('copy', function() {
return gulp.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
.pipe(gulp.dest('public'));
});
тогда согласно документации мы должны скопировать a.js
а также bad.js
, Тем не менее, когда я запускаю это с gulp v3.9.1, он только копирует a.js
,
Это известная ошибка? Есть ли способ сделать это?
1 ответ
Это не ошибка, документация просто неверна. Новейшая версия глотка gulp@3.9.1
который использует vinyl-fs@0.3.14
, Поведение, на которое вы ссылаетесь, не было введено до vinyl-fs@1.0.0
,
На самом деле, в других документах gulp четко указано, что упорядочение глобусов будет новой функцией в gulp@4.0.0
:
Глобусы, переданные в gulp.src, будут оцениваться по порядку, что означает, что это возможно
gulp.src(['*.js', '!b*.js', 'bad.js'])
(исключить каждый файл JS, который начинается сb
кроме bad.js)
Это означает, что вы можете просто использовать текущую версию разработки gulp (gulpjs/gulp#4.0
) и воспользоваться новой функцией. Однако обратите внимание, что gulp 4.x кардинально отличается от gulp 3.x, когда речь идет об определении задач.
Одним из обходных путей было бы продолжать использовать gulp 3.x для определений задач, но использовать новейшую версию vinyl-fs
создавать виниловые потоки:
var vinylFs = require('vinyl-fs');
gulp.task('copy', function() {
return vinylFs.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
.pipe(vinylFs.dest('public'));
});
И если вы не хотите делать это, вы всегда можете использовать merge-stream
объединить несколько потоков в один поток:
var merge = require('merge-stream');
gulp.task('copy', function() {
return merge(gulp.src(['client/*.js', '!client/b*.js']),
gulp.src(['client/bad.js']))
.pipe(gulp.dest('public'));
});