javascript - For 循环中的 Grunt 运行

标签 javascript gruntjs

我是 grunt 新手。

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

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

grunt --foo=bar build

grunt --foo=baz build

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

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”,运行两次以获得相同的值。

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

最佳答案

我最近遇到了同样的问题,并写道 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中指定的每个选项/配置运行构建任务。

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

关于javascript - For 循环中的 Grunt 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26025396/

相关文章:

javascript - 在 window.location 重定向后预选 html 选择选项

javascript - 无法设置属性...只有 Getter (javascript es6)

javascript - 传递参数

gruntjs - 如何在 yeoman 下正确退出 grunt watch

gruntjs - Grunt concat + uglify带有源 map

javascript - 我是否总是使用 Knockout 映射插件来制作我的 View 模型,从而过度使用它?

javascript - 无法创建 Assets (factory.newResource())

jquery - 在 jquery 插件中使用相对 API Url 的最佳方法

javascript - Ember 应用程序套件当我运行 grunt dist 时,如何从包含的 js 库列表中排除 jquery

css - 如何从 bower 组件加载 css 文件