ForGach in Grunt任务配置

时间:2014-03-24 19:44:39

标签: gruntjs

我正在处理Gruntfile配置。我需要遍历所有匹配的文件 我的模板变量中定义的模式如下所示:

module.exports = {
    templates: {
        all: ['src/templates/**/*.html*’]
    }
};

我需要将这些文件中的每一个用作此处定义的'swapper'目标上名为'files'的数组中的值:

task-config :{
  swapper : {
    files: { 
      // foreach (file in templates) {
      //   ‘destination/‘ + “‘“ + file.ToString() + “‘“ : ‘file.ToString()’
      //   if (isNotLastFile()) {
      //      appendComma()
      //   }
      // }
   },
   tasks: ['jshint:ignore_warning:test' ],
     options: {
       encodeSpecialChars: true
     }
  }
}

我很难弄清楚语法。甚至可以做我在Grunt尝试的事情吗?或者,我是否需要采用不同的方式?

由于

1 个答案:

答案 0 :(得分:5)

IIFE对此非常有用(尽管有些人认为,Gruntfiles是javascript并使用Node.js编写):

"task-config": {
  swapper : {
    files: (function() {
      var templates = require('./templates.js').templates;
      var out = {};
      Object.keys(templates).forEach(function(key) {
        var val = templates[key];
        // Do something with key/val to determine the dest/src
        var dest = 'destination/' + someHowDetermineYourDestination(val);
        out[dest] = val;
      });
      // Return the computed object
      return out;
    }())
  },
},

有关IIFE的更多信息,请查看此文章:http://benalman.com/news/2010/11/immediately-invoked-function-expression/

你可能不需要IIFE。而只需使用expand选项:

"task-config": {
  swapper : {
    expand: true,
    cwd: 'src/templates/',
    src: ['**/*.html'],
    dest: 'destination/',
  },
},

这将在src/templates内的每个文件上运行任务并输出,包括子文件夹到destination/文件夹。

有关详细信息,请参阅Grunt文档的此部分:http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically