Grunt (极小匹配/通用)文件夹排除

我有一个情况,我试图使用咕哝线程代码库,不包括特定的文件夹。

Grunt 在引擎盖下使用极小匹配(类似于 bsdglobb)来匹配文件,但是我似乎不知道如何做一个。排除文件夹的 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 文件夹中。

我已经习惯了正则表达式,但似乎不知道如何在这里重复一个模式或东西-我还尝试了这样的东西:

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

希望容器会重复,但是没有用,它只是不能匹配所有东西。

有什么方法可以传递一个正则表达式来生成文件路径,或者让这个工作为我服务吗?

更新:

以下是我目前处理这个问题的方式:

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

我仍然感兴趣,如果文件夹排除可能在小型匹配。

51778 次浏览

在目前正在开发的0.4.0 a 版本中,grunt.file.expand方法现在支持排除,并且这样做的方式可能比底层的极小匹配匹配库要简单。这是可能的,因为 grunt.file.expand接受 多个模式(而极小匹配只接受一个)。

来自 扩展文档:

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

这意味着您可以指定 ['/**/*.js', '!**/ignoreme/**'],而第一种模式会将所有 .js文件添加到结果集中,第二种模式则会从结果集中删除所有 /ignoreme/文件。

如果你真的很好奇,可以看看 Grunt.file.match 单元测试

请注意,提供此功能的 grunt 版本还没有正式发布,但是如果您有兴趣在项目中使用它,请参阅 我什么时候可以使用正在开发的特性‘ X’? FAQ 条目。