如何在从 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);
    });
});