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
В следующий раз ничего не произойдет. Почему?
Ответы
Ответ 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
проверяет быстрые изменения и в то время как ваш файл заменяется новым загруженным)