2016-06-21 9 views
2

ガルプはほとんど優れています。それは、タスクの実行中である場合を除き、最後のタスクが終了したときにタスクを再実行するために、同じタスクに関連するファイルを常に監視するとは限りません。仕事中にガルプウォッチは常に見ないでください

[08:30:51] Starting 'composer'... 
composer task 
Loading composer repositories with package information 
Installing dependencies (including require-dev) from lock file 
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them. 
Nothing to install or update 
Generating autoload files 
Process exited with code 0 
[08:30:53] Finished 'composer' after 1.62 s 

EDIT:短時間で気にしないでください。これは単なる悪い例です。実際に実行しているタスクは10-15秒で実行されます。その時間が過ぎると、関連する変更を追加して保存することが現実的です。

これは、composer.lockファイルを編集するときにトリガーされます。

composer.lockファイルを編集したとタスクが実行を開始した、編集上、時間の間に再びcomposer.lockを保存「作曲タスクは、」出力、期待

後:それは後に再度実行するタスク仕上げ

実際:タスクが終了し、私はUbuntuの上で一気時計を使用してい

以来起こった変化を収容するために再実行されません。

+0

私はあなたの問題を理解していますが、なぜそうしますか?私は部分を実行しながら編集&保存を意味する。 – KRONWALLED

+0

現実的な例として、TypeScriptをJavaScriptにコンパイルするタスクを実行しているとします。私が何かを書いて保存したら、コンパイラ・タスクが実行され、実行中にいくつかの関連性のある変更が行われます。最初のタスクは終了しますが、タスクは再度実行されません。コンパイルのタスクが再度実行されなかったため、ソースファイルの –

+0

あなたは1.62秒ですばやく関連する変更を行っていますか?私は誰かがこれに興味があるように答えてくれることを願っていますが、コンパイル中にコードを変更しない限り、これに対する解決策は想像できません。 – KRONWALLED

答えて

2

あなたがタスクを実行したときにはgulp.watch()は見ていません。 がgazeにありますが、特定の時間内に同じイベントが発生するのを防ぐのは非常に短く、実行している可能性は低いです。確かに0に設定してみることもできますが、それは解決するよりも多くの問題を引き起こす可能性があります。

可能性が高い原因はorchestratorは、単にタスクif it is already runningを実行していないということです。

Orchestratorの各タスクを確実にし、あなたがより多くを実行することを指定した場合でも、それぞれの依存関係は、オーケストレーションの実行中に一度だけ実行されます一度。 [...]タスクを複数回実行する必要がある場合は、オーケストレーションが終了するまで待ってから(startのコールバック)、startを再度呼び出します。

私は実際にはsetTimeout()を使用して、長時間実行されるタスクをシミュレートすることにより、あなたの問題を再現することができます

gulp.task('task', function (done) { 
    setTimeout(done, 10000); 
}); 

gulp.task('watch', function() { 
    gulp.watch('some_file.txt', {debounceDelay:0}, ['task']); 
}); 

私はこの問題を解決するために思い付くことができる唯一のことは、手動タスクがすでに実行されているかどうかを追跡することです

function runTask(taskName) { 
    var running = false; 
    var rerun = false; 
    return function() { 
    if (running) { 
     rerun = true; 
    } 
    running = true; 
    gulp.start(taskName, function() { 
     if (rerun) { 
     rerun = false; 
     gulp.start(taskName); 
     } else { 
     running = false; 
     } 
    }); 
    }; 
} 

gulp.task('task', function (done) { 
    setTimeout(done, 10000); 
}); 

gulp.task('watch', function() { 
    gulp.watch('some_file.txt', {debounceDelay:0}, runTask('task')); 
}); 
+0

あなたの答えはクールだが、私が3つのファイルを保存すれば、ビルドには15秒かかる。私は結果を得るために45秒待たなければならないでしょうか?理想的な世界では、私はタスクをキャンセルして別の時間に実行することができます。私はhttps://github.com/kingmotley/gulp-debounced-watchを見ていますが、https://github.com/paulmillr/chokidarを使っていますが、まだ成功していません。 – CESCO

+0

これは理想的な世界ではありません。タスクを取り消すことはできず、既に実行中のときにタスクを開始することはできません。 (そして、バウンスは問題ではありません。私の答えを見てください。) –

+0

これは非常に多くのレベルを吸う。代わりが必要です!とにかく@Sven – CESCO

関連する問題