2016-12-02 10 views
0

私のscssファイルは素晴らしい機能を果たしています。変更が行われると、タスクが実行されています。今gulp watch on change変更が実行される前にタスクが完了するのを待つ

var sassWatch = gulp.watch([paths.root + '**/*.scss'], ['sass']); 

変更が検出されたときに、私が変更されたファイルを取りたい、.CSS、その後、CSSファイルを言って何かをする拡張子を変更。

sassWatch.on('change', function (ev) { 
     changeNotification('Sass file', ev.type, 'Running compilation'); 
     ev.path = ev.path.substr(0, ev.path.lastIndexOf(".")) + ".css"; 
     return gulp.src(ev.path).pipe(slang(ev.path)); // DO SOMETHING WITH CSS FILE 
    }); 

問題は(「変更」に関する...実行の最後の行は、SASSのタスクが完了する前にいることである。

[11:30:46] Sass file was changed. Running compilation & slinging to AEM. 
[11:30:46] Starting 'sass'... 
[11:30:46] Starting 'sass:compile'... 
[11:30:46] DO SOMETHING WITH CSS FILE 
[11:30:50] Finished 'sass:compile' after 4.59 s 
[11:30:50] Starting 'css:clean'... 
[11:30:50] Finished 'css:clean' after 3.45 ms 
[11:30:50] Finished 'sass' after 4.6 s 

の一部または全部を予防する方法はあります?タスクが完了する前に、実行からの変更機能にようになり私の理想的なシナリオは次のとおりです。

[11:30:46] Sass file was changed. Running compilation & slinging to AEM. 
[11:30:46] Starting 'sass'... 
[11:30:46] Starting 'sass:compile'... 
[11:30:46] Finished 'sass:compile' after 4.59 s 
[11:30:50] Starting 'css:clean'... 
[11:30:50] Finished 'css:clean' after 3.45 ms 
[11:30:50] Finished 'sass' after 4.6 s 
[11:30:50] DO SOMETHING WITH CSS FILE 

答えて

1

run-sequenceパッケージみましょうあなたは、複数のタスクを1つずつ実行して、あなたのカリフォルニア州。実際には複数のタスクを実行する必要はありません。 1つのタスクを実行してから、関数を実行するだけです。

幸運にもrun-sequenceは、すべてのタスクの実行が終了したときに呼び出されるコールバック関数を受け入れます。したがって、実際にはDO SOMETHING WITH CSS FILEというものをそのコールバック関数に張り付ける必要があります:

var runSequence = require('run-sequence'); 

gulp.watch([paths.root + '**/*.scss'], function (ev) { 
    runSequence('sass', function() { 
    changeNotification('Sass file', ev.type, 'Running compilation'); 
    ev.path = ev.path.substr(0, ev.path.lastIndexOf(".")) + ".css"; 
    return gulp.src (ev.path).pipe(slang(ev.path)); // DO SOMETHING WITH CSS FILE 
    }); 
}); 
関連する問題