gulp watch terminates immediately

后端 未结 2 1149
灰色年华
灰色年华 2021-02-19 10:59

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\"         


        
相关标签:
2条回答
  • 2021-02-19 11:06

    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.

    0 讨论(0)
  • 2021-02-19 11:08

    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.

    0 讨论(0)
提交回复
热议问题