Gulp src与嵌套目录不匹配

时间:2020-06-09 17:59:41

标签: javascript node.js gulp glob

Gulp的src函数将全局数组作为输入,并生成Vinyl个文件对象的流。我正在使用gulp-debug来查看通过管道发送的文件。 src函数是node-glob的包装。

gulp: v4.0.0
gulp-cli: v2.1.0
gulp-debug: v4.0.0
glob: v7.1.6
node: v10.16.0
OS: Ubuntu 18.04

我在同一个gulpfile中具有这两个功能:

function debugGulpSrc() {
  ['/var/abc/scss/**/*.scss'].forEach( (globPattern) => {
  return src( globPattern )
    .pipe( debug({minimal: true}) )
  })
}

function debugNodeGlob() {
  ['/var/abc/scss/**/*.scss'].forEach( (globPattern) => {
    glob( globPattern, {}, function (err, files) {
      if (err) {
        console.log('Error: ' + err);
        return;
      }

      files.forEach( (file) => {
        console.log(file);
      });
    })
  })
}
我的debug函数中的

debugGulpSrc仅打印出流中的文件名。全局数组中的单个条目是有意的。我只测试了一种,但是一旦它起作用,我将从项目根目录添加更多的glob模式。我使用forEach是因为Gulp的src()函数错误而没有警告(即使strict打开和silent关闭)也没有警告,如果该模式没有匹配项。这是一个很大的项目,我有一些文件夹,直到以后才会匹配模式。

我要遍历的文件结构如下:

/var/abc/scss/style.scss
/var/abc/scss/folder1/style.scss
/var/abc/scss/folder1/index.html
/var/abc/scss/folder1/nested_dir/index.scss
/var/abc/scss/folder2/style.scss
/var/abc/scss/folder2/index.html
... many other folders and files

我的debugNodeGlob()函数(使用glob)返回我期望的所有文件。但是,debugGulpSrc()返回根目录和folder1的根目录中的文件,但没有其他返回。它不会在嵌套目录中获取文件。 Gulp src文档说应该使用双星(**)球形模式,而glob本身通常是这样做的。

在这两种方法中,我diffdebug输出集作为一个选项,除了输出之外,其他所有内容都是相同的。

我可以看到的唯一区别(除了许多Gulp src未返回的文件)是glob返回的文件具有绝对路径,而src返回的文件具有项目的相对路径。根:

/var/abc/scss/folder1/style.scss

vs。

../abc/scss/folder1/style.scss

我正在从命令行从此处运行脚本文件:

/var/abc/scripts/gulpfile.js

我使用与gulp-watch输入相同的全局模式,并且可以正常工作并正确处理嵌套的子目录。

我已在某种程度上阅读了相关文件的源代码,在Google上进行了广泛的研究,打开了调试程序,并尝试了Gulp src中的每个选项变体。我大约有15个小时的时间尝试调试,并尝试了所有我能想到的东西。

我觉得Gulp src正在做一些事情,将我的双星通配符扩展到块设备上的每个目录,找到一个不匹配的目录,然后死了,但是我不知道该如何死。修复该问题或获得所需的功能。每当我添加一个子目录时,向数组中添加新的glob模式都是不合理的。就像Isaac的glob库一样,双星的glob模式应该可以处理此问题(包括没有匹配文件的子文件夹)(文档说srcglob的包装)

0 个答案:

没有答案
相关问题