我正在处理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尝试的事情吗?或者,我是否需要采用不同的方式?
由于
答案 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