2015-12-09 3 views
1

У меня возникла проблема с каким-то странным взаимодействием между watchify и gulp.watch. Когда мы используем watchify с опросом, который мне нужно сделать, потому что он работает в бродячей среде, тогда задача gulp.watch запускается только при первом изменении файлов.Часы Gulp только срабатывают один раз с watchify

gulpfile:

var gulp = require('gulp'); 
var util = require('gulp-util'); 
var eslint = require('gulp-eslint'); 
var browserify = require('browserify'); 
var watchify = require('watchify'); 
var source = require('vinyl-source-stream'); 

function bundle(bundler) { 
    return bundler 
    .bundle() 
    .on('error', (error) => util.log(util.colors.red('Error compiling scripts:'), error.message)) 
    .pipe(source('./app.js')) 
    .pipe(gulp.dest('./')); 
} 

gulp.task('default', ['build', 'watch']); 

gulp.task('build', ['lint', 'scripts']); 

gulp.task('lint', function() { 
    gulp.src('./src/**/*.js') 
    .pipe(eslint()); 
}); 

gulp.task('scripts', ['lint'], function() { 
    var bundler = browserify({ 
     entries: ['./src/app.js'], 
     cache: {}, 
     packageCache: {}, 
     fullPaths: true, 
    }); 

    var watcher = watchify(bundler, {poll: true}); 
    watcher.on('update',() => { 
     util.log('Now Updating Scripts...'); 
     return bundle(watcher); 
    }); 

    return bundle(watcher); 
}) 

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

Sample хранилище здесь: https://github.com/mudetroit/watchify-gulp-watch-issue

При запуске глотка и изменить файл дважды после начала компиляции вы видите следующее.

[12:02:49] Using gulpfile ~/repo/watchify-gulp-watch-issue/gulpfile.js 
[12:02:49] Starting 'lint'... 
[12:02:49] Finished 'lint' after 24 ms 
[12:02:49] Starting 'scripts'... 
[12:02:49] Finished 'scripts' after 98 ms 
[12:02:49] Starting 'build'... 
[12:02:49] Finished 'build' after 6.17 μs 
[12:02:49] Starting 'watch'... 
[12:02:49] Finished 'watch' after 8.41 ms 
[12:02:49] Starting 'default'... 
[12:02:49] Finished 'default' after 11 μs 
[12:03:48] Starting 'lint'... 
[12:03:48] Finished 'lint' after 3.87 ms 
[12:03:48] Now Updating Scripts... 
[12:03:55] Now Updating Scripts... 

Несколько пунктов стоит отметить, если я не использую watchify и сделать полный перекомпилирует это работает просто отлично, но это замедлить, чтобы быть полезным на практике. Если я беру опрос, он отлично работает, но это мешает ему работать в бродячем окружении с NFS. Попытался понять, что происходит здесь все утро, и никуда не денусь, поэтому надеюсь, что смогу помочь.

ответ

1

Итак, после создания копания мы нашли the culprit. Похоже, что и глоток, и провидец используют чокидар под капотом. Попытка оптимизации chokidar вызывает проблему. На данный момент он работает над созданием отдельных процессов.

+0

Привет, Мэтт, очень приятно видеть кого-то, имеющего такую ​​же проблему ... спасибо за рытье! Как вы можете запустить это в отдельных процессах? У вас есть пример? – Jacob

Смежные вопросы