22

特定の後続のタスク (バッチ全体で --force は必要ありません) が失敗しても実行されるように、一連のタスクを構成する方法はありますか? たとえば、このようなケースを考えてみましょう

  1. いくつかの一時ファイルを作成します
  2. これらの一時ファイルを含むいくつかの単体テストを実行します
  3. これらの一時ファイルをクリーンアップします

私がすることができます:

grunt.registerTask('testTheTemp', ['makeTempFiles', 'qunit', 'removeTempFiles']);

ただし、qunit が失敗した場合、removeTempFiles タスクは実行されません。

4

5 に答える 5

19

後世のために、 @explunit からのPRが grunt に到達するのを待つ間、これは改善されたハックになる可能性があります。

var previous_force_state = grunt.option("force");

grunt.registerTask("force",function(set){
    if (set === "on") {
        grunt.option("force",true);
    }
    else if (set === "off") {
        grunt.option("force",false);
    }
    else if (set === "restore") {
        grunt.option("force",previous_force_state);
    }
});

// .....

grunt.registerTask("foobar",[
    "task1",
    "task2",
    "force:on",     // temporarily turn on --force
    "task3",        // will run with --force in effect
    "force:restore",// restore previous --force state
    "task4"
]);
于 2013-10-30T04:01:14.717 に答える
19

ここに 1 つの回避策があります。きれいではありませんが、問題は解決します。

失敗しても続行したいシーケンスの最初/最後にラップできる 2 つの追加タスクを作成します。の既存の値をチェックするのは、コマンド ラインから渡された値をgrunt.option('force')上書きしないようにするためです。--force

grunt.registerTask('usetheforce_on',
 'force the force option on if needed', 
 function() {
  if ( !grunt.option( 'force' ) ) {
    grunt.config.set('usetheforce_set', true);
    grunt.option( 'force', true );
  }
});
grunt.registerTask('usetheforce_restore', 
  'turn force option off if we have previously set it', 
  function() {
  if ( grunt.config.get('usetheforce_set') ) {
    grunt.option( 'force', false );
  }
});
grunt.registerTask( 'myspecialsequence',  [
  'usetheforce_on', 
  'task_that_might_fail_and_we_do_not_care', 
  'another_task', 
  'usetheforce_restore', 
  'qunit', 
  'task_that_should_not_run_after_failed_unit_tests'
] );

また、これをネイティブにサポートするために、Gruntの機能リクエストも送信しました。

于 2013-06-06T21:57:37.277 に答える
3

おそらく、非同期のgrunt タスクを作成し、必要なタスクを連続してgrunt.util.spawnすることができます。その後、成功/エラー コードの条件付きロジックを記述できます。この質問への回答に似たもの

于 2013-05-21T01:12:43.460 に答える