我有一种情况,我试图使用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

这将匹配所有内容,包括ignoreme:

/**/*.js

所以我想我可以做一些类似的事情:

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

但这与ignoreme文件夹中的文件相匹配.

我已经习惯了正则表达式,但似乎不知道如何在这里重复一个模式或其他东西——我还try 了以下内容:

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

希望容器会重复,但这不起作用,它只是无法匹配所有内容.

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

Update:

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

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接受multiple个模式(而minimatch只接受一个).

the grunt.file.expand documentation开始:

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

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

如果你真的很好奇的话,看看grunt.file.match unit tests.

请注意,提供此功能的grunt版本尚未正式发布,但如果您对在项目中使用它感兴趣,请参阅When will I be able to use in-development feature 'X'?常见问题解答条目.

Node.js相关问答推荐

如何在Node js中从MongoDB获取特定数据,使用GET方法?

MongoDB的方面查询的Postgres类似功能

Sass-TypeError:无法读取未定义的属性(正在读取';indexOf';)

尽管 tsconfig 中提供了正确的路径,但仍出现找不到模块错误

SvelteKit应用程序立即退出,没有错误

npm 在 Windows 终端中不工作

在 nodejs 中使用 multer 上传文件返回未定义的 req.file 和空的 req.body

[NodeJs 从 ADAL 升级到 MSAL]:无法在字符串上创建属性authenticationScheme

多个 Axios 请求合并

JAVASCRIPT:foreach 循环后的空数组

如何在 Node.js 的 console.log() 中创建换行符

我可以向NPM添加调试脚本吗?

Chrome 浏览器未将 if-modified-since 标头发送到服务器

Passport 登录和持久会话

chart.js 无法创建图表:无法从给定项目获取上下文

tsconfig.json 中模块类型的区别

Node.js 与 .net 中的异步/等待

Nodejs将字符串转换为UTF-8

node.js 异步库

AWS Lambda:如何将秘密存储到外部 API?