0

我们正在尝试使用 grunt.config.set 为动态连接的字符串运行 grunt 任务。这些 grunt.configs 在 forEach 循环中设置,并且每次在任务运行之前都会更改。

不幸的是,这不起作用,因为 grunt 只使用最后一个 grunt.config.set 并以相同的值多次运行它。

用一个简单的“复制”任务看这个例子(“复制”只是一个例子,我们也想在其他任务中使用这种动态选项):

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 复制四次。

是否有可能构建使用动态值的那种任务?这会很好,因为唯一的其他解决方案是使用静态字符串多次复制每个任务。

谢谢!丹尼尔

4

1 回答 1

1

问题是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);
    });
});
于 2015-06-19T09:39:18.547 回答