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

どちらも完全なタスク 'build' を実行し、それぞれ値をassemble のオプションの1 つ、つまり production 'true' または 'false' に渡します。


アセンブルの例をもう少し説明することに加えて、次のようにします。

アセンブルでは、追加するオプションがあります{{#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 オプションを設定し、単一の親タスク内から複数回タスクを実行します。grunt.task.run@Raphael Verger が言及しているように、現在のタスクが終了するまでタスクの実行を延期するため、これは不可能です。

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

青色が 2 回ログに記録されます。

いくつかいじった後、実行するサブタスクごとに異なるオプション/構成を動的に指定できる面倒なタスクを思いつきました。タスクをgrunt-galvanizeとして公開しました。仕組みは次のとおりです。

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

で指定された各オプション/構成を使用してログタスクを実行することにより、必要に応じての順にログが記録されます。galvanizeConfig

于 2015-11-03T05:49:51.400 に答える