Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Stop Gulp Task if Conditions are met

I am trying to make it so if a --theme flag isn't specified it stops the gulp task and wondering the best way to do it in a DRY way.

I would like each individual task to stop if a --theme isn't specified and also have the default task stop if it isn't met.

I have tried a few things with no luck so far.

Thanks,

gulp.task('test', function() {

    if(typeof(args.theme) == 'undefined' || args.theme === true) {
        console.log(msg.noTheme);
        return; // end task
    }

    // run rest of task...

});

gulp.task('test-2', function() {

    if(typeof(args.theme) == 'undefined' || args.theme === true) {
        console.log(msg.noTheme);
        return; // end task
    }

    // run rest of task...

});

gulp.task('default', ['test-1', 'test-2']);
like image 518
Ross Avatar asked Feb 12 '15 18:02

Ross


3 Answers

You can simply stop the script with:

process.exit()
like image 158
Pier Avatar answered Sep 30 '22 16:09

Pier


I think the easiest way would be to create a verifyArgs function which throws an error when the requirements aren't met:

function verifyArgs() {
  if(typeof(args.theme) == 'undefined' || args.theme === true) {
    throw Error(msg.noTheme);
  }
}

gulp.task('test', function() {
    verifyArgs();
    // run rest of task...
});

gulp.task('test-2', function() {
    verifyArgs();
    // run rest of task...
});

gulp.task('default', ['test-1', 'test-2']);
like image 38
Ben Avatar answered Sep 30 '22 15:09

Ben


Some sort of async function might help you here. Maybe like this:

function processArgs(callback) {
  if(typeof(args.theme) == 'undefined' || args.theme === true) {
    return callback(new Error('Theme Not Defined'));
  }
  return callback();
}

gulp.task('test', function(done) {
  processArgs(function(err) {
    if(err) {
      console.log(err); 
      return done(err);
     }

    //else run my task
  })
});
like image 35
sctskw Avatar answered Sep 30 '22 17:09

sctskw