咕噜(minimatch / glob)文件夹排除

我有一个情况,我试图用grunt来删除一个代码库,不包括特定的文件夹。

咕噜使用minimatch(类似于bsdglob)在引擎盖下匹配文件,但我似乎无法弄清楚如何做一个.gitignore风格排除一个文件夹。

我想要摄取这个:

ignoreme

并匹配这些:

 /folder/path/here/to/something/ok.js /another/folder/path.js /test.js 

但不匹配这些:

 /folder/ignoreme/something.js /folder/path/here/to/ignoreme/metoo/file.js 

这将匹配一切,包括忽略:

 /**/*.js 

所以我想我可以做一些事情:

 /**/!(ignoreme)/**/*.js 

但是匹配ignoreme文件夹中的文件。

我习惯了正则expression式,但似乎无法弄清楚如何在这里重复模式或东西 – 我也尝试过这样的东西:

 /(!(ignoreme)|*)*/*.js 

希望容器可以重复,但是这不起作用,它只是没有匹配所有的东西。

任何方式来传递一个正则expression式grunt文件path,或使这对我工作?

更新:

以下是我目前正在处理的问题:

 var pattern = /\/ignoreme\// var files = grunt.file.expandFiles(arrayOfFilesPassedToMinimatch).filter(function(f){ return !pattern.test(f) }) 

我仍然有兴趣,如果文件夹排除可能在minimatch。

在当前正在开发的版本0.4.0a中, grunt.file.expand方法现在支持排除,并且以比底层minimatch匹配库更复杂的方式进行排除。 这是可能的,因为grunt.file.expand接受多个模式(而minimatch只接受一个)。

从grunt.file.expand文档 :

此方法接受逗号分隔的通配符模式或通配符模式数组。 匹配从头开始的模式的path! 将从返回的数组中排除。 模式按顺序处理,所以包含和排除顺序是重要的。

这意味着你可以指定['/**/*.js', '!**/ignoreme/**'] ,而第一个模式将所有的.js文件添加到结果集,第二个模式将删除所有/ignoreme/来自结果集的文件。

看看grunt.file.matchunit testing你是否真的好奇。

请注意,提供此function的grunt版本尚未正式发布,但是如果您有兴趣在项目中使用它,请参阅何时能够使用开发中function“X”? FAQ条目。