我有一个笨拙的任务,用grunt.option('foo')
来查看选项。如果我从grunt.task.run('my-task')
调用此任务,我该如何更改这些参数?
我正在寻找类似的东西:
grunt.task.run('my-task', {foo: 'bar'});
这相当于:
$ grunt my-task --foo 'bar'
这可能吗?
(This question是我遇到的另一个问题,但并不完全相同,因为在这种情况下我无法访问原始任务的Gruntfile.js。)
答案 0 :(得分:20)
如果您可以使用基于任务的配置选项而不是grunt.option,这应该可以为您提供更精细的控制:
grunt.config.set('task.options.foo', 'bar');
答案 1 :(得分:12)
看起来我可以使用以下内容:
grunt.option('foo', 'bar');
grunt.task.run('my-task');
设置全局选项而不仅仅是针对该命令感觉有点奇怪,但它有效。
答案 2 :(得分:7)
创建一个新任务,设置该选项,然后调用修改后的任务。这是assemble的真实例子:
grunt.registerTask('build_prod', 'Build with production options', function () {
grunt.config.set('assemble.options.production', true);
grunt.task.run('build');
});
答案 3 :(得分: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
-OR-
$ grunt build-live
他们都将完成全部任务并建立'并分别将值传递给options of assemble之一,即生产' true'或者' false'。
除了更多地说明汇编示例之外:
在汇总时,您可以选择添加{{#if production}}do this on production{{else}}do this not non production{{/if}}
答案 4 :(得分:1)
grunt是所有程序化的..所以如果您之前已经设置了任务选项,那么您已经以编程方式完成了此操作。
只需使用grunt.initConfig({ ... })
设置任务选项。
如果您已经初始化,并且之后需要更改配置,则可以执行类似
的操作 grunt.config.data.my_plugin.goal.options = {};
我正在将它用于我的项目并且它有效。
答案 5 :(得分:0)
我最近遇到了同样的问题:以编程方式在单个父任务中多次设置grunt选项和运行任务。正如@Raphael Verger所提到的,这是不可能的,因为grunt.task.run
推迟了任务的运行,直到当前任务完成:
grunt.option('color', 'red');
grunt.task.run(['logColor']);
grunt.option('color', 'blue');
grunt.task.run(['logColor']);
将导致颜色 blue 被记录两次。
经过一番摆弄后,我想出了一个笨拙的任务,允许为每个要运行的子任务动态指定不同的选项/配置。我已将任务发布为grunt-galvanize。以下是它的工作原理:
var galvanizeConfig = [
{options: {color: 'red'}, configs: {}},
{options: {color: 'blue'}, configs: {}}
];
grunt.option('galvanizeConfig', galvanizeConfig);
grunt.task.run(['galvanize:log']);
这将根据需要通过运行 log 任务记录 red 然后 blue ,其中包含{{1}中指定的每个选项/配置}}