使用 Grunt 忽略文件数组

Ignore array of files with Grunt

如果我的 Gruntfile 中有一组文件,如下所示:

var jsFiles = [
  'src/js/abc.js',
  'src/js/def.js'
]

如何排除此数组中的每个文件而不必在每个文件前添加 !?这种模式似乎对我不起作用:

!jsFiles

我也希望能够做到 !<%= project.jsFiles %> 其中 <%= project.jsFiles %> 是一个文件数组。

Stack Overflow 上有许多类似的问题,但据我所知,没有一个解决忽略文件数组的问题。

取反文件数组:

如果你想否定一个文件列表,像这样:

var jsFiles = [
  'src/js/abc.js',
  'src/js/def.js'
];

您可以创建一个函数来添加“!”:

function addErase(jsFiles){
  var arr = [];
  jsFiles.forEach(function(element){
    arr.push("!" + element);
  });
  return arr;
}

然后你可以转换你的数组:

var jsFileErase = addErase(jsFiles);
//   ['!src/js/abc.js',
//   '!src/js/abc.js']

如果你想把列表放在package.json:

Package.json:

{
  "name": "foo",
  "version": "0.0.1",
  "jsFiles":[
    'src/js/abc.js',
    'src/js/def.js'
  ],
  ...

里面 Gruntfile.js:

var project = require('./package.json');
var jsFiles = project.jsFiles;

然后你可以用函数addErase取消所有文件

否定文件夹内的所有元素:

如果你想否定文件夹内的所有元素,你需要把“!”在路径之前和路径末尾的“/**/*”:

示例:

var jsFile = '!src/js/**/*'