【问题标题】:Grunt task target array?Grunt 任务目标数组?
【发布时间】:2014-12-29 02:58:09
【问题描述】:

我可以将多个文件数组设置为一个目标:

task:{
    target:{
        files:[
            {
                expand:true,
                cwd:'client/',
                dest:'server/',
                src:[
                    'scripts/**/*.js',
                    'styles/**/*.css',
                    'images/**'
                ]
            },
            {
                expand:true,
                cwd:'client/assets/',
                src:'**/*',
                dest:'server/'
            }
        ]
    }
}

现在我想对目标做同样的事情。

像这样:

task:{
    server:[
        {
            options:{
                …
            },
            files:{
                …
            }
        },
        {
            options:{
                …
            },
            files:{
                …
            }
        }
    ]
}

但这不适用于 Grunt:

Warning: Object #<Object> has no method 'indexOf' Use --force to continue.

我该怎么做?

现在我用这个方案来做同样的事情:

task:{
    server_<subtask_one>:{
        options:{
            …
        },
        files:{
            …
        }
    },
    server_<subtask_second>:{
        options:{
            …
        },
        files:{
            …
        }
    }
}

但是对每个子任务重复任务前缀然后将它们启动到单独的行中并不方便,如下所示:

'dataSeparator:<target>_<subtask_one>',
'dataSeparator:<target>_<subtask_second>',

【问题讨论】:

    标签: javascript arrays gruntjs build-process


    【解决方案1】:

    除非您想编写自定义任务,否则这是您唯一的选择。但是大多数任务确实允许您在任务级别指定options 块,因此您至少可以为自己节省一些重复:

    task:{
        options:{
            // options common to all tasks
        },
        server_<subtask_one>:{
            options:{
                // override options if necessary
            },
            files:{
                // custom for this target
            }
        },
        server_<subtask_second>:{
            options:{
                // override options if necessary
            },
            files:{
                // custom for this target
            }
        }
    }
    

    正如我所说,您也许可以编写一个自定义任务来动态重置每个目标的 grunt config options,但这很麻烦,我不建议这样做......甚至不确定它是否能正常工作。

    grunt.registerTask('mutli-task', 'Compile options and pass to task', function() {
    
        grunt.config.set('task.server_<subtask_one>.some_setting', 'value');
        // ...
        grunt.task.run('task');
    
        // Now do it again, but with different settings... maybe in a loop?
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多