Watchify не всегда обнаруживает изменения в файлах javascript

Я создал задачу gulp для связывания модулей с браузером, и я использую watchify для просмотра изменений. Вот моя задача gulp для проверки:

gulp.task('watch:browserify', function () {
    var opts = assign({}, watchify.args, {
        entries: ['./js/app.js'],
        debug: true,
        basedir: './app/',
        paths: ['./lib']
    });

    var b = watchify(browserify(opts));

    b.on('update', function () {
        bundle();
    });

    function bundle() {
        gutil.log(gutil.colors.blue("Starting Browserify..."));
        var time = Date.now();
        return b.bundle()
            .on('error', gutil.log.bind(gutil, gutil.colors.red('Browserify Error')))
            .pipe(source('bundle.js'))
            .pipe(buffer())
            .pipe(sourcemaps.init({loadMaps: true}))
            .pipe(sourcemaps.write('.'))
            .pipe(gulp.dest('app'))
            .on('end', function () {
                var duration = Date.now() - time;
                gutil.log(gutil.colors.blue('Finished Browserify') + " (%dms)", duration);
            })
    }

    bundle();
});

Если я редактирую главный файл js (./js/app.js), это изменение всегда обнаруживается. Но когда я редактирую некоторые другие файлы, необходимые для основного файла, это изменение обнаруживается примерно каждый раз (но не всегда). Я здесь что-то не так?

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

Ответ 1

В вашем примере кода есть две проблемы.

Во-первых, watch:browserify должен либо выполнить обратный вызов, либо вернуть поток, либо могут возникнуть условия гонки, как обсуждалось здесь. Так, например, последняя строка в вашей задаче может быть return bundle();.

Во-вторых, при использовании watchify опции cache и packageCache должны быть переданы в browserify(), как показано ниже, и указаны здесь.

    var b = browserify({ cache: {}, packageCache: {} });

Наконец, убедитесь, что app.js на самом деле зависит, где-то в цепочке зависимостей, от других файлов, которые вы редактируете.

Ответ 2

У меня была одна и та же проблема, и у меня было все, что было написано в @akarve правильно. Я вернулся к watchify: "^2.6.0", и проблема была решена. Однако время сборки/обнаружения было чуть медленнее - примерно полсекунды. Тем не менее, гораздо лучше, чем время от времени (часто!), Не обнаружив изменений в процессе проверки.

Связанное обсуждение здесь (также где я нашел комментарий о v2.6.0) - https://github.com/substack/watchify/issues/216#issuecomment-119285896