Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript grunt(最小匹配/全局)文件夹排除_Javascript_Regex_Node.js_Glob_Gruntjs - Fatal编程技术网

Javascript grunt(最小匹配/全局)文件夹排除

Javascript grunt(最小匹配/全局)文件夹排除,javascript,regex,node.js,glob,gruntjs,Javascript,Regex,Node.js,Glob,Gruntjs,我有一种情况,我试图使用grunt来过滤代码库,不包括特定的文件夹 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/t

我有一种情况,我试图使用grunt来过滤代码库,不包括特定的文件夹

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
但不符合以下条件:

/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
这将匹配所有内容,包括ignoreme:

/**/*.js
所以我想我可以这样做:

/**/!(ignoreme)/**/*.js
但这与ignoreme文件夹中的文件相匹配

我习惯于正则表达式,但似乎不知道如何在这里重复模式或其他东西-我还尝试了以下内容:

/(!(ignoreme)|*)*/*.js
希望容器会重复,但这不起作用,它只是无法匹配所有内容

有没有办法将正则表达式传递给grunt文件路径,或者让它为我工作

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

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只接受一个)

发件人:

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

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

如果你真的很好奇的话,请看一看


请注意,提供此功能的grunt版本尚未正式发布,但如果您对在项目中使用它感兴趣,请参阅常见问题解答条目。

非常感谢您的回复!对于我的问题,这看起来是一个更加优雅的解决方案——我会等待一个稳定的版本,但当它发布时我会切换!值得注意的是:排除模式只有在它们排除的内容被包含模式匹配之后才起作用。把我的排除模式放在第一位让我感到困惑。
grunt watch--verbose
查看哪些文件正在被监视这太棒了。我想我必须编写一些奇怪的过滤器来忽略一个文件。使用
map
会导致
文件
包含
TRUE
FALSE
值的数组<代码>筛选将正确地将
文件
设置为筛选路径的列表。没错,你一定是在晚上键入的。已更新代码示例以使其正常工作。