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插件首先执行相同的任务。