I am adding watchify to our build process, but I want to set a prerequisite for checking the operation, which means that the file (s) that changed has passed our ESLint step (which uses ESLint ).
I thought about it:
function runBrowserify(watch){ var babel = babelify.configure({ optional: ['es7.objectRestSpread'] }); var b = browserify({ entries: './app/main.js', debug: true, extensions: ['.jsx', '.js'], cache: {}, packageCache: {}, fullPaths: true }) .transform(babel); if(watch) { // if watch is enable, wrap this bundle inside watchify b = watchify(b); b.on('update', function(ids) { //run the linting step lint(ids); //run the watchify bundle step gutil.log(gutil.colors.blue('watchify'), 'Started'); bundleShare(b); }); b.on('time', function (time) { gutil.log(gutil.colors.blue('watchify'), 'Finished', 'after', gutil.colors.magenta(time), gutil.colors.magenta('ms')); }); } bundleShare(b); } function bundleShare(b) { b.bundle() .pipe(source('main.min.js')) .pipe(gulp.dest('./dist')); } function lint(glob) { return gulp.src(glob) .pipe(eslint()) .pipe(eslint.format()) .pipe(eslint.failOnError()); }
The problem is that the iteration step is asynchronous, so it does not end before the binding is complete (it also throws, so I probably need to use plumber to stop it from completing the watch step).
So, how would I make a precondition before calling bundleShared ?
gulp eslint browserify watchify
Aaron powder
source share