【问题标题】:Ignore array of files with Grunt使用 Grunt 忽略文件数组
【发布时间】:2016-07-18 03:04:50
【问题描述】:

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

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

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

!jsFiles

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

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

【问题讨论】:

标签: javascript arrays gruntjs grunt-contrib-concat


【解决方案1】:

对文件数组求反:

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

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

包.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/**/*'

【讨论】:

  • 谢谢。这是一个很好的解决方案。我能看到的唯一问题是,如果像这样使用它:['**/*', jsFileErase] 首先包含所有内容,然后忽略数组中的文件。我们遇到了一个问题,因为jsFileErase 本身就是一个数组。
  • 您可以使用像下划线这样的库,也可以使用像 underscorejs.org/#flatten 这样的函数
  • 很高兴知道!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2014-02-23
  • 2018-03-07
  • 1970-01-01
  • 2014-04-09
  • 2016-01-01
  • 1970-01-01
相关资源
最近更新 更多