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

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

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, так что, возможно, вы получите полное представление о том, как я планировал это работать


person tuks    schedule 11.06.2015    source источник
comment
У меня такая же проблема. он не всегда обнаруживает небольшие изменения. Я все еще нажимаю Enter 3-5 раз, чтобы создать несколько новых строк. Он всегда обнаружит это, и когда он перестроит мое приложение, я удалю строки. Я знаю, это неудобно, но это работает :D   -  person marcel    schedule 11.06.2015
comment
@marcel да, сейчас я делаю то же самое, но это очень, очень раздражает   -  person tuks    schedule 11.06.2015
comment
Я попробовал ваш проект GitHub - обнаружение изменений во всех файлах javascript в app/js/... на моей машине работает нормально. (Может быть, вы уже исправили это?)   -  person Simon Groenewolt    schedule 06.09.2015


Ответы (2)


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

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

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

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

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

person akarve    schedule 15.10.2015

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

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

person GTCrais    schedule 18.07.2017