在grunt.task.run上使用变量进行Grunt for循环

卢卡斯·雅里德(Lucas Yarid)

我目前正在尝试通过发送参数以多次运行另一个任务的方式创建一个任务。

这是我已经正常运行的单一构建任务:

var country = grunt.option('country') || 'X0';
var product = grunt.option('product') || 'Y0';
var subdomain = grunt.option('subdomain') || 'Z0';

grunt.registerTask('build_home', [
    'sprite:publicProduct',
    'sprite:home',
    'uglify:home',
    'sass:home',
    'csscomb:home',
    'cssmin:home'
]);

因此,在日常工作中,我将运行以下命令:

grunt build_home --country=X0 --product=Y7 --subdomain=Z3

我现在要执行的任务是运行所有可能的预定义选项:

grunt build_home_all

会是这样的:

grunt.registerTask('build_home_all', function() {

    var products = ['Y0','Y1','Y2','Y3','Y4','Y5','Y6','Y7','Y8','Y9'];
    var subdomains = ['Z0','Z1','Z2'];

    for (i = 0; i < products.length; i++) { 
        for (j = 0; j < subdomains.length; j++) {
            grunt.task.run('build_home --product='+products[i]+' --subdomain='+subdomains[j]);
        };
    };

    grunt.log.ok(['Finished.']);

});

我已经用grunt.util.spawn实现了它,但是它有点异步运行,并且迫使我的cpu同时运行各种任务。

一致

当使用grunt.task.run调用任务的方法时,您将无法像通常使用CLI那样传递参数,但是仍然可以使用冒号分隔的符号传递参数:
build_home --country=X0 --product=Y7 --subdomain=Z3=>build_home:X0:Y7:Z3

将您的build_home_all任务更新为以下内容:

function buildHomeAll() = {
    var products = ['Y0','Y1','Y2','Y3','Y4','Y5','Y6','Y7','Y8','Y9'],
        subdomains = ['Z0','Z1','Z2'],
        tasks = [],
        country = grunt.option('country') || 'X0';


    for (i = 0; i < products.length; i++) {
        for (j = 0; j < subdomains.length; j++) {
            tasks.push(['build_home',country, products[i],'subdomains[j]'].join(':'));
        };
    };
    grunt.task.run(tasks);

    grunt.log.ok(['Finished.']);
}

您将使用调用此函数 grunt build_home_all --country=X0

接下来,您将需要修改build_home任务以说明可以传入参数的新方式:

function buildHome() = {
    if (!grunt.option('country') {
        grunt.option('country', this.args[0] || 'X0');
    })
    if (!grunt.option('product') {
        grunt.option('product', this.args[1] || 'Y0');
    })
    if (!grunt.option('subdomain') {
        grunt.option('subdomain', this.args[2] || 'Z0');
    })

    grunt.task.run([
        'sprite:publicProduct',
        'sprite:home',
        'uglify:home',
        'sass:home',
        'csscomb:home',
        'cssmin:home'
    ]);

最后,在您的中公开这些功能gruntfile.js

grunt.registerTask('build_home', buildHome);
grunt.registerTask('build_home_all', buildHomeAll);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

purecss grunt task fails

来自分类Dev

Grunt Task-释放端口

来自分类Dev

使用grunt.task.run(taskname)运行参数化的任务

来自分类Dev

grunt-bower-task和Polymer

来自分类Dev

使用load-grunt-task有什么缺点吗?

来自分类Dev

使用Grunt + Bootstrap 3时发生LESS循环错误

来自分类Dev

在循环内使用Task.Run()与WhileAll()进行负载测试

来自分类Dev

Grunt Task为新模块自动生成文件

来自分类Dev

For grunt中的循环运行相同的脚本,但传递不同的参数

来自分类Dev

grunt-bower-task抛出“警告:找不到模块'bower'使用--force继续。”

来自分类Dev

用grunt替换变量

来自分类Dev

用grunt替换变量

来自分类Dev

循环使用Task.Factory.StartNew

来自分类Dev

循环使用Task.Factory.StartNew

来自分类Dev

使用Grunt模拟端点

来自分类Dev

使用grunt-develop

来自分类Dev

使用Intellij调试Grunt

来自分类Dev

使用Grunt的ENOTSUP

来自分类Dev

在PHP前端使用grunt

来自分类Dev

使用Grunt启动Tomcat

来自分类Dev

使用Maven安装grunt

来自分类Dev

使用grunt测试JavaScript

来自分类Dev

使用grunt-develop

来自分类Dev

使用grunt插件

来自分类Dev

使用grunt-browserify对global进行依赖

来自分类Dev

使用grunt-browserify对global进行依赖

来自分类Dev

在配置中使用Grunt任务变量

来自分类Dev

Grunt Concat Task,如何忽略所有.min.js文件?

来自分类Dev

Bootstrap 3.0.1 bower.json打破了grunt-bower-task