当前位置: 首页 > 面试题库 >

grunt(minimatch / glob)文件夹排除

竺焕
2023-03-14
问题内容

我遇到一种情况,我试图使用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文件夹中的文件匹配。

我已经习惯了正则表达式,但是似乎无法在这里弄清楚如何重复一个模式或类似的东西-我也尝试过类似的东西:

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

希望容器会重复,但是那行不通,只是无法匹配所有内容。

有什么方法可以通过正则表达式来查询文件路径,还是可以为我工作?

这是我目前处理此问题的方式:

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文档中:

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

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

如果您真的很好奇,请看一下grunt.file.match单元测试。

请注意,尚未正式发布具有此功能的grunt版本,但是如果您有兴趣在项目中使用它,请参阅何时可以使用开发中功能“
X”?
常见问题解答条目。



 类似资料:
  • 问题内容: 我有一个像这样的项目: 我需要写的将包括除和之外的所有文件夹, 但 保留文件。 这是我的代码不起作用: 问题答案: 这似乎可行: 从全局匹配中排除单个文件非常棘手,因为在minimatch文档中没有类似的示例。 https://github.com/isaacs/minimatch “如果模式以字符开头,则否定”。

  • 问题内容: 我有一台服务器,该服务器的各个文件夹,子文件夹和子子文件夹中都有很多文件。 我正在尝试制作一个search.php页面,该页面将用于在整个服务器中搜索特定文件。如果找到文件,则返回位置路径以显示下载链接。 这是我到目前为止的内容: 如果文件位于我的域名的根目录下,则脚本可以正常工作…现在,我试图找到一种方法来使其也扫描子文件夹和子文件夹,但是我被卡在了这里。 问题答案: 有两种方法。

  • 我想从我的checkstyle报告中忽略一个特定的文件夹(名为generated-sources ),因为它们是生成的。 我正在使用 eclipse-cs 来显示我的违规行为。 我在xml中添加了suppressionfilter: 我的压抑.xml看起来像这样: 但它不起作用。有什么想法吗?

  • 问题内容: 我正在尝试按日期顺序显示文件数组(最后修改)。 我已经完成了遍历数组并将其排序到另一个数组中的购买循环,但是有没有更简单(更有效)的方法来做到这一点? 问题答案: *从PHP 7.2.0开始, *警告 已被弃用。强烈建议不要使用此功能。 为了后代的目的,如果在接受的答案中链接的论坛帖子丢失或不清楚,则所需的相关代码为: 在我的系统上对此进行了测试,并验证了它确实可以根据需要按文件mti

  • 试图从我的构建中提取文件夹,但以下操作不起作用: 有什么想法吗?

  • 我想镜像两个文件夹,但排除某些文件类型(例如js文件)。我可以用 /XF选项来做到这一点。 我遇到的问题是,如果目标文件夹中有一个带有js文件的Foo文件夹,但源文件夹中没有Foo文件夹,那么下面的robocopy命令将删除目标端的Foo文件夹以及其中的js文件。 机器人复制。exe d:\Source d:\Destination/E/PURGE/XF*。js/COPYALL/FFT 我想要的是