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
而不是 dir
或 dir/unwanted.js
?
这是 Compact Fomat:
中的样子
mine: {
src: [
'*'
]
}
或者,在 bash 中,您会像这样得到它们:
ls -p | grep -v /;
这是我用 Files Object Format 尝试过的:
这行不通:
mine: {
files: {
'.': ['*']
}
}
这也不行:
mine: {
files: {
'./': ['*']
}
}
连这个都不行:
mine: {
files: {
'./': ['*/server.js']
}
}
也不是这个:
mine: {
files: {
'./': ['server.js']
}
}
这有效,但它递归运行,我不希望这样:
mine: {
files: {
'./': ['**/server.js']
}
}
在进行了大量的测试和代码阅读之后,我证实它实际上是 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.js
和 server.js
.
正如预期的那样,由于 JSON 是 non-supported 语言,package.json
的统计数据被省略了。
补充说明:
我发现这个 post 的答案非常有用,它解释了如何从初始返回的数组中排除以 !
开头的模式。
我这辈子都想不出如何得到这份工作。我正在使用的模块的 grunt 配置(grunt-sloc) requires the Files Object Format。使用它,我希望能够匹配顶级目录下的所有常规文件(即非目录)。
例如,假设这是我的目录结构,其中 +
表示目录,-
表示常规文件:
repo
+ dir
- unwanted.js
- server.js
如何使用 Grunt 的 Files Object Format 来匹配 server.js
而不是 dir
或 dir/unwanted.js
?
这是 Compact Fomat:
中的样子mine: {
src: [
'*'
]
}
或者,在 bash 中,您会像这样得到它们:
ls -p | grep -v /;
这是我用 Files Object Format 尝试过的:
这行不通:
mine: { files: { '.': ['*'] } }
这也不行:
mine: { files: { './': ['*'] } }
连这个都不行:
mine: { files: { './': ['*/server.js'] } }
也不是这个:
mine: { files: { './': ['server.js'] } }
这有效,但它递归运行,我不希望这样:
mine: { files: { './': ['**/server.js'] } }
在进行了大量的测试和代码阅读之后,我证实它实际上是 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.js
和 server.js
.
正如预期的那样,由于 JSON 是 non-supported 语言,package.json
的统计数据被省略了。
补充说明:
我发现这个 post 的答案非常有用,它解释了如何从初始返回的数组中排除以 !
开头的模式。