I created a gulp task for bundling modules with browserify and I am using watchify to watch for changes. Here is my gulp task for 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();
});
If I edit main js file (./js/app.js), the change is always detected. But when I edit some other files that the main file requires, the change is detected roughly every other time (but not always). Am I doing something wrong here?
Here is the full Github repo so maybe you get the complete idea how I planned this to work
There are two issues with your code sample.
First,
watch:browserifymust either take a callback or return a stream, or race conditions can occur, as discussed here. So, for example, the last line in your task could bereturn bundle();.Second, when using watchify, the
cacheandpackageCacheoptions must be passed tobrowserify(), as shown below and specified here.Finally, ensure that
app.jsin fact depends, somewhere in its dependency chain, on the other files that you are editing.