【发布时间】:2013-12-05 21:20:48
【问题描述】:
当你使用 grunt 创建新任务时,即:
grunt.registerMultiTask('name', 'description', function() {...});
文件对象在任务函数中作为this.files 可用。这是在 grunt 配置中查看传递给 task.files 的值并对其进行解析、扩展任何通配符的标准化结果。
问题 1:
第一个问题是,我有一个可能需要递归多次的任务。每次,它都想使用 files 对象来获取与初始配置参数匹配的所有文件等的最新列表。例如:
grunt.registerMultiTask('sometask', 'description', function sometask() {
var files = this.files;
//do some stuff with files, then run this func again if needbe:
if(somecondition) sometask.call(this);
});
这里的问题是文件对象没有更新以反映我对文件结构所做的任何更改,因此下次调用该函数时,文件列表可能已过期。
我想做的是这样的:
grunt.registerMultiTask('sometask', 'description', function sometask(renormal) {
//update this.files if we need to:
if(renormal) {
this.files = renormalize(this.data.files);
}
var files = this.files;
//do some stuff with files, then run this func again if needbe:
if(somecondition_is_matched) sometask.call(this, renormal);
});
问题 2:
此外,也许我想制作一个需要两个文件映射的插件,所以在 grunt 配置中我可能会有类似的内容:
grunt.initConfig({
...
someplugin: {
filesOne: [{
cwd: "hello"
src: ["something/**"],
dest: "another"
}],
filesTwo: {
"another2": ["soemthing2/*", "!something2/*.js"]
}
}
...
});
在插件中,我希望能够规范化 filesOne 和 filesTwo 的任何内容,就像 grunt 规范化“文件”一样,以便用户可以在所有常用格式。
所以..
grunt API 似乎公开了用于扩展模式等的函数,但似乎没有提供任何东西来实现它对文件对象所做的规范化。
我有什么遗漏/一些公认的方法吗?
【问题讨论】:
标签: javascript gruntjs