16

我有一个繁重的任务,用grunt.option('foo'). 如果我从 调用此任务grunt.task.run('my-task'),我该如何更改这些参数?

我正在寻找类似的东西:

grunt.task.run('my-task', {foo: 'bar'});

这相当于:

$ grunt my-task --foo 'bar'

这可能吗?

这个问题是我遇到的另一个问题,但并不完全相同,因为在这种情况下,我无法访问原始任务的 Gruntfile.js。)

4

6 回答 6

20

如果您可以使用基于任务的配置选项而不是 grunt.option,这应该可以为您提供更精细的控制:

grunt.config.set('task.options.foo', 'bar');
于 2013-09-23T08:55:54.923 回答
12

看起来我可以使用以下内容:

grunt.option('foo', 'bar');
grunt.task.run('my-task');

全局设置选项而不是只为该命令设置选项感觉有点奇怪,但它确实有效。

于 2013-02-13T22:39:52.353 回答
7

创建一个设置选项的新任务,然后调用修改后的任务。这是assemble的真实示例:

grunt.registerTask('build_prod', 'Build with production options', function () {
  grunt.config.set('assemble.options.production', true);
  grunt.task.run('build');
});
于 2014-07-28T20:52:13.707 回答
4

除了@Alessandro Pezzato

Gruntfile.js:

grunt.registerTask('build', ['clean:dist', 'assemble', 'compass:dist', 'cssmin', 'copy:main']);

    grunt.registerTask('build-prod', 'Build with production options', function () {
        grunt.config.set('assemble.options.production', true);
        grunt.task.run('build');
    });

    grunt.registerTask('build-live', 'Build with production options', function () {
        grunt.option('assemble.options.production', false);
        grunt.task.run('build');
    });

现在你可以运行

$ grunt build-prod

-或者-

$ grunt build-live

他们都将完成完整的任务“构建”,并分别将值传递给assemble 的选项之一,即生产“真”或“假”。


除了更多地说明 assemble 示例:

在 assemble 中,您可以选择添加{{#if production}}do this on production{{else}}do this not non production{{/if}}

于 2015-04-21T13:32:46.603 回答
1

grunt 都是程序化的。所以如果你之前已经为任务设置了选项,那么你已经以编程方式完成了。

仅用于grunt.initConfig({ ... })设置任务的选项。

如果您已经初始化,并且之后需要更改配置,您可以执行类似的操作

grunt.config.data.my_plugin.goal.options = {};

我将它用于我的项目并且它有效。

于 2016-01-03T09:01:58.897 回答
0

我最近遇到了同样的问题:以编程方式设置 grunt 选项并从单个父任务中多次运行任务。正如@Raphael Verger 提到的,这是不可能的,因为grunt.task.run将任务的运行推迟到当前任务完成:

grunt.option('color', 'red');
grunt.task.run(['logColor']);
grunt.option('color', 'blue');
grunt.task.run(['logColor']);

将导致蓝色被记录两次。

经过一番摆弄,我想出了一个 grunt 任务,它允许为每个要运行的子任务动态指定不同的选项/配置。我已将任务发布为grunt-galvanize。以下是它的工作原理:

var galvanizeConfig = [
  {options: {color: 'red'}, configs: {}},
  {options: {color: 'blue'}, configs: {}}
];
grunt.option('galvanizeConfig', galvanizeConfig);
grunt.task.run(['galvanize:log']);

这将记录red然后blue 根据需要通过在.galvanizeConfig

于 2015-11-03T05:49:51.400 回答