2016-12-02 100 views
0

我有一个手表发生我的scss文件功能很好。进行更改时,任务正在运行。吞噬更改等待任务完成之前执行更改

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 
    }); 

的问题是,青菜任务之前,对(“变化” ......运行的最后一行结束。

[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包让我们在运行多任务一个接一个在您的CA。你不需要运行多个任务。你只需要运行一个任务,然后执行一个功能。

幸运的是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 
    }); 
});