【问题标题】:How to use dynamic values in Grunt tasks called from inside a forEach?如何在从 forEach 内部调用的 Grunt 任务中使用动态值?
【发布时间】:2015-06-19 17:39:18
【问题描述】:

我们正在尝试使用 grunt.config.set 为动态连接的字符串运行 grunt 任务。这些 grunt.config 设置在一个 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。

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

谢谢! 丹尼尔

【问题讨论】:

    标签: foreach gruntjs grunt-contrib-copy


    【解决方案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);
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2014-04-11
      相关资源
      最近更新 更多