Gulp文件匹配 - 如何监视目录下的所有内容

115

这是一个相当愚蠢的问题,但我一直没有找到令人满意的答案:如何使用gulp globbing选择某个目录下所有子目录中的文件?

我尝试过:

'./src/less' './src/less/' './src/less/*'

但似乎都不起作用。

2个回答

186
所有目录下所有文件的通用模式通常为./src/less/**/*.*./src/less/**/*,两者都可以工作。
一般来说,最好匹配特定的文件扩展名,即使它们应该都是相同的,以防止抓取系统文件或其他垃圾文件。在这种情况下,你可以使用./src/less/**/*.less仅匹配.less文件,或者像.src/less/**/*.{less,css}这样,同时匹配.less.css文件。 Grunt网站提供了大多数minimatch glob的非常好的参考。 (Grunt和gulp都使用minimatch,因为它是几乎与Node相关的所有内容的全局库。)
虽然这是开源软件,但gulp或minimatch有自己的完整文档将会更好。

我会查看Grunt网站,谢谢。关于系统文件的观点确实有道理。我希望它能更加宽松一些,因为我正在使用它进行监视。 - Jehan
1
如果你还没有学习和使用gulp-watch模块来监视文件,我强烈建议你这样做,因为它可以处理监视新文件的情况。虽然设置需要一些额外的工作,但在我看来是值得的。 - OverZealous
8
供将来参考,我使用的工具位于http://www.globtester.com/ ,它使用minimatch进行匹配,而gulp是通过node-glob使用的。 "glob是指node-glob语法或者可以直接是文件路径"(来源:https://github.com/gulpjs/gulp/blob/master/docs/API.md)"[node-glob]使用minimatch库来进行匹配" (来源:https://github.com/isaacs/node-glob)。 - Daniel Dropik

2
"

'./src/less/**' 似乎有效。但如果有人有更明确的所有 globbing 命令列表,我很乐意接受您的答案并将其添加到 gulp 文档中。现在,您必须转到 gulp 的子模块之一的文档,然后给您提供 manpages 列表。特别是对于使用 gulp 的设计师来说,拥有直接参考将是很好的。

"

1
gulp.watch('./build/**', ...) 似乎对上级目录(例如,./.git/)中的某些更改触发了(误?)。在末尾添加额外的 /* 似乎可以避免这个问题:gulp.watch('./build/**/*', ...) - medmunds
@medmunds 我发现了类似的结果。glob 必须以 * 或特定的 *.less 结尾。*.* 不起作用,因为它会忽略没有扩展名的文件。它似乎使用 POSIX 风格匹配来处理 . 并进行匹配;这意味着如果一个文件中没有“点”,它将不会匹配。也许应该为 . 设置一个特殊情况,因为在 Windows 上通过 DIR 使用 . 可以匹配“LICENSE”,但不幸的是 ln *.* 却不能。'.' 有两个不同的含义是很遗憾的。在我看来,* 看起来可以满足我们的需求。我认为开发人员可能从未真正打算使用 . glob,因此可能需要抛出警告。 - Andrew T Finnell
@filthy_wizard - ** 是递归的。 - Steven Ventimiglia
除非有错误,否则“”不应捕获预期目录子树之外的任何内容。唯一的区别是,“ / *”会排除基本目录本身。 - webninja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接