Grunt Files Object Format:所有常规文件文件紧接在顶级目录下

Grunt Files Object Format: All regular files files immediately under top level directory

我这辈子都想不出如何得到这份工作。我正在使用的模块的 grunt 配置(grunt-sloc) requires the Files Object Format。使用它,我希望能够匹配顶级目录下的所有常规文件(即非目录)。

例如,假设这是我的目录结构,其中 + 表示目录,- 表示常规文件:

repo
  + dir
    - unwanted.js
  - server.js

如何使用 Grunt 的 Files Object Format 来匹配 server.js 而不是 dirdir/unwanted.js

这是 Compact Fomat:

中的样子
mine: {
  src: [
    '*'
  ]
}

或者,在 bash 中,您会像这样得到它们:

ls -p | grep -v /;

这是我用 Files Object Format 尝试过的:

在进行了大量的测试和代码阅读之后,我证实它实际上是 minimatch 包(Grunt 的依赖项),它没有返回我正在寻找的匹配项。所以这不是我正在使用的 grunt 模块;这是我的 grunt 配置。

由于 Grunt 如此流行并且这似乎是一个非常常见的用例,我猜想有一种方法可以做到这一点。有人知道那是什么吗?

更新

正如 RobC 指出的那样,我的最后一个示例 没有 工作。它正在我的 node_modules 目录中获取 server.js,这让我觉得它在工作。

首先,FWIW,您使用 Files Object Format 方法列出的示例也不适合我,包括您的最后一个:

 // Although this worked for you, this failed for me...
 mine: {
     files: {
         './': ['**/server.js']
     }
 }

我能让它工作的唯一方法是匹配所有内容,然后使用 Grunt globbing 模式否定顶级目录。

虽然以下要点演示了对我有用的方法,但它确实需要 knowing/configuring 您希望排除的顶级目录的名称:

目录结构

给定一个目录设置如下:

repo
│
├─── dir
│   │
│   └─── unwanted.js
│
├─── foo.js
│
├─── Gruntfile.js
│
├─── node_modules
│   │
│   └─── ...
│
├─── package.json
│
└─── server.js

Gruntfile.js

...和一个Gruntfile.js配置如下:

module.exports = function(grunt) {
    grunt.initConfig({
        sloc: {
            mine: {
                files: {
                    '.': [
                        '**', // Match everything and add to the results set.

                        // Explicitly state which directories under the top
                        // level directory to negate from the results set.
                        '!**/node_modules/**',
                        '!**/dir/**',

                        // Files can be negated from the results set too.
                        '!**/Gruntfile.js' // 
                    ]
                }
            }
        }

    });
    grunt.loadNpmTasks('grunt-sloc');
    grunt.registerTask('default', [
        'sloc:mine'
    ]);
};

Sloc 结果

运行 grunt 通过 CLI 正确地导致 grunt-sloc 仅报告两个文件的统计信息,即 foo.jsserver.js.

正如预期的那样,由于 JSON 是 non-supported 语言,package.json 的统计数据被省略了。

补充说明:

我发现这个 post 的答案非常有用,它解释了如何从初始返回的数组中排除以 ! 开头的模式。