Search code examples
javascriptnode.jsworkflowgulpgulp-watch

How can Gulp be restarted upon each Gulpfile change?


I am developing a Gulpfile. Can it be made to restart as soon as it changes? I am developing it in CoffeeScript. Can Gulp watch Gulpfile.coffee in order to restart when changes are saved?


Solution

  • You can create a task that will gulp.watch for gulpfile.js and simply spawn another gulp child_process.

    var gulp = require('gulp'),
        argv = require('yargs').argv, // for args parsing
        spawn = require('child_process').spawn;
    
    gulp.task('log', function() {
      console.log('CSSs has been changed');
    });
    
    gulp.task('watching-task', function() {
      gulp.watch('*.css', ['log']);
    });
    
    gulp.task('auto-reload', function() {
      var p;
    
      gulp.watch('gulpfile.js', spawnChildren);
      spawnChildren();
    
      function spawnChildren(e) {
        // kill previous spawned process
        if(p) { p.kill(); }
    
        // `spawn` a child `gulp` process linked to the parent `stdio`
        p = spawn('gulp', [argv.task], {stdio: 'inherit'});
      }
    });
    

    I used yargs in order to accept the 'main task' to run once we need to restart. So in order to run this, you would call:

    gulp auto-reload --task watching-task
    

    And to test, call either touch gulpfile.js or touch a.css to see the logs.