2016-04-02 21 views
0

私は2つのグラン・タスクを持っています:AとB. Aの実行時間は5秒です。 Bの実行時間は10秒です。非同期で実行する方法2タスクをGruntで同期させますか?

私はこの2つのタスクをプリコミットスクリプトで実行します。両方とも同期しているので、スクリプトコミット前の実行時間は15です。私は何とかこの2つのタスクを組み合わせて非同期的に実行したいと思います。したがって、これはプリコミットを実行するのにわずか10秒しかかかりません。

可能ですか?

この地獄では動作しません:)私はこのためにうなり声を使用することはありません

grunt.registerTask('pre-commit', 'Run sonar and jscs async', function() { 
    var done = this.async(), 
    _counter = 0, 
    asyncTasksCounter = 2, 
    asyncHelper = function (foo) { 
     setTimeout(function() { 
     foo(); 
     _counter++; 
     if (_counter === asyncTasksCounter) { 
      done(); 
     } 
     }, 16.66) 
    }; 
    asyncHelper(function() { 
    grunt.task.run('A'); 
    }); 
    asyncHelper(function() { 
    grunt.task.run('B'); 
    }); 
}); 

答えて

1

npmを使用していると仮定して、私は別々にタスクを定義してshell-executor(WindowsおよびMac)のようなものを使用してそれらを実行するためにnpmを使用します。

script sectionpackage.jsonにタスクを追加した後、npm run [scriptname]というスクリプトをnpm run prepublishのように実行します。

scripts: { 
    "precommit": "shell-exec \"grunt sonar\" \"grunt jscs\"", 
} 

同様のスクリプトconcurrentlyは、並行タスクでうまく機能します。これらのモジュールが必要です

理由は、そうでない場合は、あなたが行うことができ、様々なOSが&(パラレル)を扱うためであると異なっ&&(同時):

"precommit": "grunt sonar & grunt jscs", 
+0

が同時にOK働きました。パラレルは機能しません。 PSハ、AとBがソナーとjscであることをどのように知っていますか? :D –

+0

あなたのタスクの説明は "Run sonar and jscs async"です。 – Andy

+0

Ahah true :)ありがとうございました:)いいえ、それは秘密ではない、ちょうど重要な情報ではありません:) –

関連する問題