Gulp 4 glob для исключения определенных файлов и папок, не работающих

Я недавно установил gulp 4 [из 3.9.1], и у меня возникла проблема с тем, чтобы мои глобусы работали, как раньше.

У меня есть целый каталог (за исключением некоторых других подкаталогов и файлов), который я хочу перенести.

Вот соответствующий код:

var path_in_str = 'my_input_dir/';
var path_out_str = 'my_output_dir/';

return gulp.src([path_in_str+'**', path_in_str+'.*', '!'+path_in_str+'node_modules', '!'+path_in_str+'node_modules/**', '!'+path_in_str+'*.json'], {dot: true})
    .pipe(gulp.dest(path_out_str));

В основном я пытаюсь предотвратить node_modules папка от передачи, и я также хочу, чтобы все .json файлы в домашней папке также не передаются.

Что происходит, так это то, что node_modules только каталог [нет содержимого] передается. Кроме того, все .json файлы передаются.

Как я могу настроить это, чтобы исправить способ обработки глобусов в Gulp 4 [как он, кажется, немного изменился]?

1 ответ

Решение

Я не мог заставить это работать с нативным gulp, поэтому я решил попробовать пакет glob для узла, и эта опция лучше всего подходит для варианта использования.

Сначала вам нужно будет установить его так:

npm install glob --save-dev

Затем укажите это в своем глотке:

var gp_glob = require('glob');

И наконец, используйте его как глобальный фильтр:

var input_list_arr = gp_glob.sync(path_in_str+'**', {ignore: [path_in_str+'node_modules/**', path_in_str+'*.json'], dot: true});

return gulp.src(input_list_arr, {base: path_in_str})
    .pipe(gulp.dest(path_out_str));  

Обратите внимание, что мы используем ignore вариант вместо ! нотация для фильтрации путей к файлам / каталогам. Также обратите внимание, что base опция указывается при передаче отфильтрованного списка в gulp.src,

Это сработало для меня, как задумано. Надеюсь, поможет.

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