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

在我的gulp任务中,我只需要将从前一个任务获得的文件复制到我必须在运行时使用asynchronous函数(因为我使用fs函数)来确定的destpath。

我该怎么做呢? 如何将asynchronous函数的结果提供给gulp.dest指令?

示例代码:

 function getDest() { fs.readdir('my/path', function(error, contents) { // pick the right one return the_right_one; }) } gulp.task('copy-stuff', ['previous-task'], function() { return gulp.src('some/file').pipe(gulp.dest(getDest())); }) 

你可以像使用任何其他asynchronous节点/ JavaScript代码一样使用callback函数来完成此操作。

例如:

 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)); }) }) 

请注意,在这个例子中,我们不返回stream或承诺,所以你会有一些麻烦使用依赖(这将完成之前,一个依赖将启动)。 为了解决这个问题,我们可以返回一个最终解决的承诺,或者简单地使用给定的callback。

像这样的东西应该工作(未testing):

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

您可以在文档中看到更多的Orchestrator(任务执行器gulp正在使用)API,或者查看带有asynchronous示例的gulp文档 。

在3.8中,你可以传递一个函数给gulp.dest ,它返回文件的目的地。 这个function必须是同步的,所以你可以这样做

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