这个gulp命令会等待依赖任务吗?

时间:2017-04-21 12:52:22

标签: javascript node.js gulp

我有以下gulp配置:

gulp.task('bar', function() {
    return gulp.src(files, { base: './' })
        .pipe(gulp.dest('dist'))
});


gulp.task('foo', ['bar'], function() {
    // do something...
});

foo运行之前,bar会等待function sendEmails() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var dataSheet = ss.getSheets()[0]; var dataRange = dataSheet.getRange(2, 1, dataSheet.getMaxRows() - 1, 4); var templateSheet = ss.getSheets()[1]; var emailTemplate = templateSheet.getRange("A1").getValue(); // Create one JavaScript object per row of data. objects = getRowsData(dataSheet, dataRange); // For every row object, create a personalized email from a template and send // it to the appropriate person. for (var i = 0; i < objects.length; ++i) { // Get a row object var rowData = objects[i]; // Generate a personalized email. // Given a template string, replace markers (for instance ${"First Name"}) with // the corresponding value in a row object (for instance rowData.firstName). var emailText = fillInTemplateFromObject(emailTemplate, rowData); var emailSubject = "Quota di partecipazione"; MailApp.sendEmail(rowData.indirizzoEmail, emailSubject, emailText); } } 完成吗?

2 个答案:

答案 0 :(得分:4)

根据文档here

  

要在任务运行之前执行并完成的一系列任务。

所以是的,它会在运行任务之前完成。

另外,请注意以下注释。如果您的任务正在解决后台任务,并且未正确返回,则gulp可能会错误地认为您的任务已完成。

  

注意:在依赖项完成之前,您的任务是否正在运行?确保您的依赖项任务正确使用异步运行提示:接受回调或返回承诺或事件流。

答案 1 :(得分:1)

除了评论和其他答案之外,我只想补充一点,您需要返回stream,承诺或致电task function callback parameter

Gulp使用Orchestrator执行任务。

返回流(最常见的情况,类似于承诺)

gulp.task('somename', function(done) {
    return gulp.src(res)
      .pipe(minify())
      .pipe(gulp.dest('build'));
});

使用回调(当返回时不是一个选项)

gulp.task('somename', function(done) {

  // async function which does not return a stream like other gulp functions
  getFilesAsync(function(err, res) {
    // pass any errors to the callback
    if (err) return done(err);

    var stream = gulp.src(res)
      .pipe(minify())
      .pipe(gulp.dest('build'))
      .on('end', done); // use the callback when it's done
  });
});

如果您不执行其中任何一项操作,gulp将无法知道任务何时完成,并将立即开始下一项任务。