如何在从 forEach 内部调用的 Grunt 任务中使用动态值?
How to use dynamic values in Grunt tasks called from inside a forEach?
我们正在尝试 运行 g运行t 任务使用 grunt.config.set 动态连接字符串。这些 grunt.configs 设置在 forEach 循环中,每次在任务 运行.
之前更改
不幸的是,这不起作用,因为 g运行t 仅使用最后一个 grunt.config.set 和 运行s 多次使用相同的值。
查看这个带有简单 "copy" 任务的例子("copy" 只是一个例子,我们也想在其他任务中使用这种动态选项):
copy: {
projectFiles : {
files : [{
src: 'src/<%= directoryName %>/*',
dest: 'build/<%= directoryName %>/*'
}]
}
}
grunt.registerTask('copyFiles', function() {
var projects = ['directory1','directory2','directory3','directory4'];
projects.forEach(function(project){
grunt.config.set("directoryName", project);
grunt.task.run('copy:projectFiles');
});
});
此任务复制四次src/directory4。
是否有可能构建那种使用动态值的任务?这很好,因为唯一的其他解决方案是使用静态字符串多次复制每个任务。
谢谢!
丹尼尔
问题是 grunt.task.run
没有立即 运行 任务,它只是将它推到任务列表中 运行 之后,而 grunt.config.set
立即执行.因此,您最终得到了要执行的相同任务的 4 次列表。
您可以通过动态定义不同的目标来获得您想要的,然后 运行 对它们进行设置,如下所示:
grunt.registerTask('copyFiles', function() {
var projects = ['directory1','directory2','directory3','directory4'];
projects.forEach(function(project){
grunt.config.set("copy." + project, {
files : [{
src: 'src/' + project + '/*',
dest: 'build/' + project + '/'
}]
});
grunt.task.run('copy:' + project);
});
});
我们正在尝试 运行 g运行t 任务使用 grunt.config.set 动态连接字符串。这些 grunt.configs 设置在 forEach 循环中,每次在任务 运行.
之前更改不幸的是,这不起作用,因为 g运行t 仅使用最后一个 grunt.config.set 和 运行s 多次使用相同的值。
查看这个带有简单 "copy" 任务的例子("copy" 只是一个例子,我们也想在其他任务中使用这种动态选项):
copy: {
projectFiles : {
files : [{
src: 'src/<%= directoryName %>/*',
dest: 'build/<%= directoryName %>/*'
}]
}
}
grunt.registerTask('copyFiles', function() {
var projects = ['directory1','directory2','directory3','directory4'];
projects.forEach(function(project){
grunt.config.set("directoryName", project);
grunt.task.run('copy:projectFiles');
});
});
此任务复制四次src/directory4。
是否有可能构建那种使用动态值的任务?这很好,因为唯一的其他解决方案是使用静态字符串多次复制每个任务。
谢谢! 丹尼尔
问题是 grunt.task.run
没有立即 运行 任务,它只是将它推到任务列表中 运行 之后,而 grunt.config.set
立即执行.因此,您最终得到了要执行的相同任务的 4 次列表。
您可以通过动态定义不同的目标来获得您想要的,然后 运行 对它们进行设置,如下所示:
grunt.registerTask('copyFiles', function() {
var projects = ['directory1','directory2','directory3','directory4'];
projects.forEach(function(project){
grunt.config.set("copy." + project, {
files : [{
src: 'src/' + project + '/*',
dest: 'build/' + project + '/'
}]
});
grunt.task.run('copy:' + project);
});
});