咕噜(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条目。