2013-02-13 110 views
16

我有一個咕嚕的任務,看grunt.option('foo')選項。如果我從grunt.task.run('my-task')調用此任務,我該如何更改這些參數?以編程方式爲咕嚕任務設置選項?

我在尋找類似:

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

這將是等價的:

$ grunt my-task --foo 'bar' 

這可能嗎?

This question是另一個問題我跑中,但不是完全一樣的,因爲在這種情況下,我沒有訪問原始任務的Gruntfile.js。)

回答

12

看起來我可以使用以下:

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

在全局設置選項而不是僅僅爲了該命令而感覺有點奇怪,但它起作用。

+0

如果你需要運行2個或多個任務,它將不起作用:/如果你有一個循環並設置'grunt.option'和'grunt.task.run',這兩個任務都會運行在最後一次迭代的'grunt .option'; @Rosarch,你知道如何解決它嗎? – 2014-04-22 22:27:57

+0

@RafaelVerger您可以創建兩個任務,一個負責運行任務,另一個負責更改選項。按交替順序排列任務,並且它們將在正確設置選項的情況下運行。 – rosswil 2014-05-29 04:27:37

+0

如果您有一套有限的選項,但是當你動態地獲得這些選項時(例如使用MySQL查詢服務器的發現)它將不起作用 – 2014-06-02 15:29:35

19

如果您可以使用基於任務的配置選項,而不是grunt.option,這應該給你更精細的控制:

grunt.config.set('task.options.foo', 'bar'); 
7

創建其設置的選項了新的任務,然後調用修改後的任務。這是assemble一個現實生活中的例子:

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

這是實現所需功能的正確方法。 – 2015-12-01 20:59:45

+0

這應該是被接受的答案 – 2016-05-21 21:32:18

3

除了@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

他們都將做充分的任務,「建設」和A值傳遞給options of assemble之一,即生產「真」或「假」。


除了說明組裝例如多一點:

在組裝必須添加一個{{#if production}}do this on production{{else}}do this not non production{{/if}}

+0

這應該是被接受的答案。 – 2015-12-01 21:00:21

+0

這太好了。您還可以通過將taskList直接傳遞給運行命令(例如,另一個可以跳過clean和cssmin的build-dev命令)來定義在不同選項中運行哪些任務: grunt.task.run(['clean: dist','assemble','compass:dist','cssmin','copy:main']); – 2016-06-03 21:12:38

0

我最近碰到了同樣的問題的選項:編程設置咕嚕選項和從單個父任務內多次運行任務。作爲@Raphael韋爾熱提到,這是不可能的,因爲grunt.task.run推遲,直到當前任務完成任務的運行:

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

將導致顏色藍色被記錄兩次。

經過一番搗鼓之後,我想出了一個咕task任務,允許爲每個要運行的子任務動態指定不同的選項/配置。我已將該任務發佈爲grunt-galvanize。下面是它如何工作的:

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

這將記錄紅色然後藍色,根據需要通過每個galvanizeConfig指定的選項/ CONFIGS的運行日誌任務。

1

grunt是所有程序化的..所以如果你之前已經在任務上設置了選項,你已經通過編程完成了這個任務。

只需使用grunt.initConfig({ ... })來設置任務選項。

,如果你已經初始化,需要事後更改配置,你可以這樣做

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

我使用它爲我的項目和它的作品。