Grunt在For循环中运行

时间:2014-09-24 19:56:47

标签: javascript gruntjs

我是新来的咕噜声。

我有一个适用于单个构建的gruntfile。有几个目标链接在一起以完成该过程。问题是我需要使用可变数据创建几个不同的构建。我正试图弄清楚如何在我的gruntfile中执行此操作。

今天,要进行构建,我只需要运行

grunt --foo=bar build

grunt --foo=baz build

我想要并尝试做的是创建一个使用数组来定义foo数据的build-all目标,如下所示:

grunt.registerTask('build-all', function() {
    var foos = ["bar", "baz"];
    for (var i in foos) {
        grunt.config.set("foo", foos[i]);
        grunt.task.run("build");
    }
});

从外观上看,似乎运行任务是非阻塞的。这意味着“foo”在第一次运行之前被设置为“baz”,为相同的值运行两次。

在这种情况下,有更好的方法来设置参数/选项吗?或者以阻止的方式运行任务?

1 个答案:

答案 0 :(得分:4)

我最近碰到了同样的问题,写了grunt-galvanize来帮助解决这个问题。以下是它的工作原理,适用于您的示例:

grunt.registerTask('build-all', function() {
    var foos = ["bar", "baz"];
    var galvanizeConfig = [];

    for (var i in foos) {
        galavanizeConfig.push({configs: {foo: foos[i]}});
    }
    grunt.option('galvanizeConfig', galvanizeConfig);
    grunt.task.run(['galvanize:build']);
});

这将使用galvanizeConfig中指定的每个选项/配置运行 build 任务。

PS。我也使用grunt-multi来处理需要并发的情况,但对于不需要并发的情况,grunt-galvanize是一个更简单的工具。