将异步函数的输出传递给gulp.dest?

时间:2014-06-16 15:35:42

标签: node.js gulp

在我的 gulp 任务中,我只需要将从先前任务获取的文件复制到我必须在运行时使用异步函数确定的dest路径(因为我使用{{1} }功能)。

我该怎么做?如何将异步函数的结果提供给fs指令?

示例代码:

gulp.dest

2 个答案:

答案 0 :(得分:4)

通过使用回调,您可以像使用任何其他异步节点/ javascript代码一样执行此操作。

例如:

function getDest(cb) {
  fs.readdir('my/path', function(error, contents) {
    // pick the right one
    cb(the_right_one);
  })
}

gulp.task('copy-stuff', ['previous-task'], function() {
  getDest(function(properDest) {
    gulp.src('some/file')
        .pipe(gulp.dest(properDest));
  })
})

请注意,在此示例中,我们不会返回流或承诺,因此您在使用依赖项时会遇到一些麻烦(这将在依赖项启动之前完成)。要解决这个问题,我们可以返回一个最终解决的promise,或者只是使用给任务的回调。

这样的事情应该有效(未经测试):

gulp.task('copy-stuff', ['previous-task'], function(callback) {
  getDest(function(properDest) {
    gulp.src('some/file')
        .pipe(gulp.dest(properDest))
        .on('end', callback)
  })
})

您可以在the documentation中查看更多Orchestrator(任务运行器gulp正在使用)API,或查看gulp documentation with async examples

答案 1 :(得分:3)

在3.8中,您可以将函数传递给返回文件目标的gulp.dest。这个功能必须是同步的,所以你可以做到

gulp.src('some/file')
  .pipe(gulp.dest(function(file){
      return 'build/' + fs.readFileSync('file_containing_target_dir');
  }));