2016-12-02 3 views
0

У меня есть часы для моих scss-файлов, которые отлично работают. Когда происходит изменение, задача выполняется.gulp watch on change wait for task to complete before execution 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 пакет позволяет вам запускать несколько задач, одна за другой, в вашем ок. вам действительно не нужно запускать несколько задач. Вам просто нужно запустить одну задачу, а затем выполнить функцию.

Удачно 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 
    }); 
});