2013-02-13 7 views
16

私は、grunt.option('foo')のオプションを見ていらっしゃる仕事があります。 grunt.task.run('my-task')からこのタスクを呼び出す場合は、どうすればこれらの引数を変更できますか?これが可能であるプログラムでグラントタスクのオプションを設定しますか?

$ grunt my-task --foo 'bar' 

:同等のだろう

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

私のようなものを探していますか?

This questionは私が中に走った別の問題であるが、この場合には、私は元のタスクのGruntfile.jsへのアクセスを持っていないので、まったく同じではありません。)

答えて

12

私は次のように使用することができますように見えます:

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

このコマンドではなく、オプションをグローバルに設定するのはちょっと奇妙ですが、機能します。あなたの代わりにgrunt.optionのタスクベースの設定オプションを使用することができる場合、これはあなたに、より細かく制御を与えるために動作するはず

+0

2つ以上のタスクを実行する必要がある場合は動作しません:/ループがあり、 'grunt.option'と' grunt.task.run'を設定すると、両方のタスクは 'grunt 。オプション '; @共和党、それを解決する方法を知っていたのですか? –

+0

@RafaelVergerでは、タスクを実行するタスクとオプションを変更するタスクの2つのタスクを作成できます。交互の順序でタスクをキューに入れると、オプションが正しく設定された状態で実行されます。 – rosswil

+0

オプションが限られている場合に機能します。これらのオプションを動的に取得すると(MySQLでサーバーのサービスを検索するなど)、動作しません。 –

19

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

は修正タスクを呼び出して、オプションを設定する新しいタスクを作成します。 。 @Alessandroペッツァート

Gruntfile.jsに加えて

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

これは、望ましい機能を実現する正しい方法です。 –

+0

これは受け入れられた回答でなければなりません –

3

::これはassembleと現実の一例である

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の1、すなわち生産「true」または「false」に値を渡すことを行います。もう少し組み立て例を示していることに加え


であなたは、私は最近、これと同じ問題に直面して走った{{#if production}}do this on production{{else}}do this not non production{{/if}}

+0

これは受け入れられた回答でなければなりません。 –

+0

これは素晴らしいことです。 taskListをrunコマンドに直接渡すことで、さまざまなオプションで実行するタスクを定義することもできます(例:cleanとcssminをスキップできる別のbuild-devコマンド)。 grunt.task.run(['clean: 'compass:dist'、 'cssmin'、 'copy:main']); –

0

を追加するオプション持って組み立て:プログラムでイサキのオプションを設定すると、 1つの親タスク内から複数回タスクを実行します。

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

は色になります2回記録されている:@Raphaelヴェルジェが言及したようgrunt.task.runは、現在のタスクが完了するまで、タスクの実行を延期するように、これは、不可能です。

いろいろなことをした後、私は、各サブタスクを実行するために異なるオプション/設定を動的に指定できるような不平等なタスクを考え出しました。私はgrunt-galvanizeのようにタスクを公開しました。しくみはこうだ:

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

これはgalvanizeConfigで指定されたオプション/コンフィグのそれぞれとログタスクを実行することにより、必要に応じて、その後、を記録します。

1

gruntはすべてプログラムによるものです。以前にタスクのオプションを設定していた場合は、これをプログラムで行いました。

grunt.initConfig({ ... })を使用すると、タスクのオプションを設定できます。あなたは既に初期化、およびその後の設定を変更する必要がある場合

と、私は私のプロジェクトのためにそれを使用しています

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

ような何かを行うことができ、それが動作します。

関連する問題