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
本身通常是这样做的。
在这两种方法中,我diff
将debug
输出集作为一个选项,除了输出之外,其他所有内容都是相同的。
我可以看到的唯一区别(除了许多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模式应该可以处理此问题(包括没有匹配文件的子文件夹)(文档说src
是glob
的包装)