@faragly

Как приостановить прослушку (watching) файлов на время выполнения функции в GulpJS?

Приветствую всех! Использую такую штуку gulp-watch для beauitify js файлов на лету. Возникла ситуация - beautify меняет файл, вотчер срабатывает еще раз и получается замкнутый круг... Нужно перед стартом функции сделать unwatch и после окончания вновь вернуть прослушку файла.
var w = watch('./source/js/**/*.js', {verbose: true});
    w.on('data', function (vinyl) {
        console.log(vinyl.relative);
        w.unwatch(vinyl.relative);
    });

Вот этот код по идее должен один раз показать измененный файл и прекратить прослушку, и при втором изменении больше не показывать ничего, но видимо я что то делаю не так.
gulp.task('watch:js', function () {
    var w = watch('./source/{amcharts,js}/**/*.js', {verbose: true});
    w.on('data', function (vinyl) {
        console.log(vinyl.relative);
        // Beautify JS file
        var jsBeautifier = (function (file) {
            var q = Q.defer();
            w.unwatch(file);
            gulp.src(file)
                .pipe(prettify({
                    config: './.jsbeautifyrc'
                }))
                .pipe(gulp.dest(function(file) {
                    return file.base;
                }))
                .on('end', function () {
                    w.add(file);
                    q.resolve(file);
                });
            return q.promise;
        }).call(this);
    });
});

Помогите правильно использовать плагин.
  • Вопрос задан
  • 709 просмотров
Решения вопроса 1
@faragly Автор вопроса
Проблема решена. Чтобы останавливать прослушку нужно использовать абсолютный путь до файла, а не относительный, то есть
var w = watch('./source/js/**/*.js', {verbose: true, events: ['change']});
    w.on('data', function (vinyl) {
        w.unwatch(vinyl.path);
        // тут операция и в on end добавляем прослушку обратно
    });

Но при редактировании файл будет обработан несколько раз, так как сначала вызовется событие change, затем addи чтобы этого не было, я оставил событие только events: ['change'] в параметрах watch
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ChickenGrinder
По моему мнению, это неправильное использование watch и beatify.
beatify - не должен срабатывать на измение файла, это должна быть отдельная задача.

Даже если сделать чтобы вотч-задача отрабатывала корректно - то это насилие над собой. Я представляю, редактирую файл в редакторе, и после каждого сохранения, мне выдается предупреждение что файл изменился из вне...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы