Gulp 4 glob 排除特定文件和文件夹不起作用

Gulp 4 glob to exclude specific files and folders not working

我最近安装了 gulp 4 [来自 3.9.1],但我在让 glob 像以前一样工作时遇到了问题。

我有一个完整的目录[减去一些其他的子目录和文件]要传输。

相关代码如下:

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 处理 glob 的方式 [因为它似乎已经略有改变]?

我无法让它与原生 gulp 一起使用,所以我想我会尝试节点 glob 包,这个选项似乎最适合用例。

首先你需要像这样安装它:

npm install glob --save-dev

然后在您的 gulp 中引用它:

var gp_glob = require('glob');

最后,将其用作 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 选项而不是 ! 符号来过滤 file/directory 路径。另请注意,将筛选列表传递到 gulp.src 时指定了 base 选项。

这按预期对我有用。希望对你有帮助。