Подтвердить что ты не робот

Gulp Часы работают только один раз

Я использую этот образец Gulp Watch: https://github.com/floatdrop/gulp-watch/blob/master/docs/readme.md#starting-tasks-on-events.

var gulp = require('gulp');
var watch = require('gulp-watch');
var batch = require('gulp-batch');

gulp.task('build', function () { console.log('Working!'); });

gulp.task('watch', function () {
    watch('**/*.js', batch(function () {
        gulp.start('build');
    }));
});

Когда я запускаю его на своем компьютере под управлением Windows 8, он запускается только при первом изменении файла:

C:\test>gulp watch
[08:40:21] Using gulpfile C:\test\gulpfile.js
[08:40:21] Starting 'watch'...
[08:40:21] Finished 'watch' after 2.69 ms
[08:40:31] Starting 'build'...
Working!
[08:40:31] Finished 'build' after 261 µs

В следующий раз ничего не произойдет. Почему?

4b9b3361

Ответ 1

Если вы внимательно прочитаете документацию, вы увидите следующую фразу:

Вы можете передать обычный обратный вызов, который будет вызываться в каждом событии или обернуть его в gulp -batch, чтобы запустить его один раз

Итак, это в основном сделка с gulp-batch. Чтобы постоянно следить за ним, просто удалите пакетный вызов:

gulp.task('build', function (done) { 
    console.log('Working!'); 
    done();
});

gulp.task('watch', function () {
    watch('app/*.js', function () {
        gulp.start('build');
    });
});

(и добавьте обратный вызов "done" к build, чтобы Gulp знал, когда вы закончите).

Btw... Я не уверен, но я думаю, что gulp-watch предназначен не только для просмотра файлов, но и для прямого возврата винилового объекта. Так что фактически использование встроенного gulp.watch должно иметь тот же эффект:

gulp.task('watch', function () {
    gulp.watch('app/**/*.js', ['build']);
});

Ответ 2

У меня была такая же проблема, и я использовал то же самое, что и ddprrt. Разница заключалась в использовании подстановочного файла каталога, который был привязан к абсолютному пути.

Я изменил это:

 gulp.task('watch', function() {
   gulp.watch('sass/shortcutcss/*.scss', ['sass'])
 });

:

 gulp.task('watch', function() {
   gulp.watch('sass/**/*.scss', ['sass'])
 });

Ответ 3

Эта проблема заставила меня сходить с ума на выходные. Я пробовал все:

  • Добавить done() - Событие
  • Переименовать/коснуться/очистить целевой CSS
  • Более конкретно с файловыми путями

Но (причина этой проблемы и) решение было настолько легким, что после этого я почувствовал себя жалким:

Просто обновите установку nodejs, моя была 0.12.x! Неудивительно, что это не сработало.

После этого действие часов снова будет работать. Иногда это снова происходит неправильно. Но в этом случае просто сохраните файл во второй раз, и его узнают. (Я думаю, что foundation/gulp watch проверяет быстрые изменения и в то время как ваш файл заменяется новым загруженным)