Npm 如何使gulp.series等待在以前的任务中创建文件

Npm 如何使gulp.series等待在以前的任务中创建文件,npm,gulp,Npm,Gulp,我目前使用的是这样的东西: gulp.task('js', gulp.series('js-a', 'js-b', 'js-c')); var gp_concat = require('gulp-concat'); gulp.task('js-a', function(done) { gulp.src([ 'file1.js', 'file2.js' ]) .pipe(gp_concat('tmp.js'

我目前使用的是这样的东西:

gulp.task('js', gulp.series('js-a', 'js-b', 'js-c'));
var gp_concat = require('gulp-concat');

gulp.task('js-a', function(done) {
    gulp.src([
            'file1.js',
            'file2.js'
        ])
        .pipe(gp_concat('tmp.js'))
        .pipe(gulp.dest('./'));

        done();
});
任务
js-c
要求首先执行
js-a
js-b
,并生成2个文件,然后在
js-c
中合并

但是,无论我使用的是
gup series
,函数
js-c
都会在创建前两个任务中的两个文件之前执行

我怎么能告诉gulp series等待这些呢

我读过其他相关的文章,但他们倾向于依靠外部脚本来完成这项工作。 我通过在
js-b
上添加一个
setTimeout
手动修复了这个问题,但这似乎是一个黑客解决方案

有没有合适的方法可以通过gulp.series实现这一点

将您置于上下文中,任务
js-a
如下所示:

gulp.task('js', gulp.series('js-a', 'js-b', 'js-c'));
var gp_concat = require('gulp-concat');

gulp.task('js-a', function(done) {
    gulp.src([
            'file1.js',
            'file2.js'
        ])
        .pipe(gp_concat('tmp.js'))
        .pipe(gulp.dest('./'));

        done();
});
我现在被迫使用超时来解决此问题:

setTimeout(function(){
    done();
}, 500);
在这种情况下不应使用
done()
,任务应返回流(请参阅)。请试试这个:

var gp_concat=require('gulp-concat');
gulp.task('js-a',function(){
回灌([
“file1.js”,
“file2.js”
])
.管道(gp_concat('tmp.js'))
.喉管("./");;
});

这很奇怪,这意味着“吞咽”的核心概念之一不起作用,这似乎不太可能。例如,您是否检查了您的
js-a
js-b
任务是否存在未等待的异步操作?任务是按顺序执行的,没错,但第一个任务生成的文件会在第二个或第三个任务中创建。是的,就是这样!非常感谢!!:)我假设我可以在上一个任务中调用“done”,对吗?我发现的唯一问题是,当使用诸如
require('child\u process')之类的东西时,如何使它工作。exec
不会返回一个steam。@Alvaro不确定在上一个任务中调用
done()
,如果它返回一个流,则肯定不需要它,因此它可能只会导致问题。对于任何不返回流的内容,
done()
如果可以在流程完成时调用它,则可以使用它。但我可能会看看是否有gulp插件首先执行相同的任务。