Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gulp watch terminates immediately

Tags:

gulp

I have a very minimal gulpfile as follows, with a watch task registered:

var gulp = require("gulp");
var jshint = require("gulp-jshint");

gulp.task("lint", function() {
  gulp.src("app/assets/**/*.js")
    .pipe(jshint())
    .pipe(jshint.reporter("default"));
});

gulp.task('watch', function() {
  gulp.watch("app/assets/**/*.js", ["lint"]);
});

I cannot get the watch task to run continuously. As soon as I run gulp watch, it terminates immediately.

I've cleared my npm cache, reinstalled dependencies etc, but no dice.

$ gulp watch
[gulp] Using gulpfile gulpfile.js
[gulp] Starting 'watch'...
[gulp] Finished 'watch' after 23 ms
like image 299
amigolargo Avatar asked Mar 17 '14 11:03

amigolargo


2 Answers

It's not exiting, per se, it's running the task synchronously.

You need to return the stream from the lint task, otherwise gulp doesn't know when that task has completed.

gulp.task("lint", function() {
  return gulp.src("./src/*.js")
  ^^^^^^
    .pipe(jshint())
    .pipe(jshint.reporter("default"));
});

Also, you might not want to use gulp.watch and a task for this sort of watch. It probably makes more sense to use the gulp-watch plugin so you can only process changed files, sort of like this:

var watch = require('gulp-watch');

gulp.task('watch', function() {
  watch({glob: "app/assets/**/*.js"})
    .pipe(jshint())
    .pipe(jshint.reporter("default"));
});

This task will not only lint when a file changes, but also any new files that are added will be linted as well.

like image 110
OverZealous Avatar answered Oct 18 '22 21:10

OverZealous


To add to OverZealous' answer which is correct.

gulp.watch now allows you to pass a string array as the callback so you can have two separate tasks. For example, hint:watch and 'hint'. You can then do something like the following.

gulp.task('hint', function(event){
    return gulp.src(sources.hint)
        .pipe(plumber())
        .pipe(hint())
        .pipe(jshint.reporter("default"));
})
gulp.task('hint:watch', function(event) {
   gulp.watch(sources.hint, ['hint']);
})

This is only an example though and ideally you'd define this to run on say a concatted dist file.

like image 2
jh3y Avatar answered Oct 18 '22 21:10

jh3y