运行 gulp 其他任务完成后的任务
Run gulp task after completion of other task
我有两组文件,我们称它们为base
和mods
。 mods
文件覆盖 base
文件,所以当我 运行 与 base
相关的 gulp 任务时,我需要 运行 mods
任务后直接。我的设置是这样的:
gulp.task('base',function(){
return gulp.src('base-glob')
.pipe(...)
.pipe(gulp.dest('out-glob'))
});
gulp.task('mods',function(){
return gulp.src('mods-glob')
.pipe(...)
.pipe(gulp.dest('out-glob'))
});
所以我想在 base
任务完成时 运行 mods
任务。请注意,这与将 base
定义为 mods
的依赖项不同,因为如果我只更改 mods
文件,我只需要 运行 mods
任务。我不想使用插件。
我一直在阅读有关回调函数的文档和同步任务的其他建议,但似乎无法理解它。
我知道您不想使用插件,但是 gulp 没有插件就无法按顺序 运行 执行一系列任务。 Gulp 4 will, but in the meantime the stopgap solution is the run-sequence 插件。
gulp.task('all', function() {
runSequence('base', 'mods');
});
这确保任务 运行 有序而不是无序依赖。
现在设置手表:
gulp.task('watch', function() {
gulp.watch('base-glob', ['all']);
gulp.watch('mods-glob', ['mods']);
});
每当 base-glob
改变时,gulp 将 运行 all
任务,这将 运行 序列 base
然后 mods
.
每当 mods-glob
更改时,gulp 将 运行 仅 mods
任务。
听起来对吗?
runSequence 有一些奇怪的错误,它一直抱怨我的任务没有定义。
如果您查看 Orchestrator 源代码,尤其是 .start()
实现,您会发现如果最后一个参数是一个函数,它会将其视为回调。
我为自己的任务编写了这个片段:
gulp.task( 'task1', () => console.log(a) )
gulp.task( 'task2', () => console.log(a) )
gulp.task( 'task3', () => console.log(a) )
gulp.task( 'task4', () => console.log(a) )
gulp.task( 'task5', () => console.log(a) )
function runSequential( tasks ) {
if( !tasks || tasks.length <= 0 ) return;
const task = tasks[0];
gulp.start( task, () => {
console.log( `${task} finished` );
runSequential( tasks.slice(1) );
} );
}
gulp.task( "run-all", () => runSequential([ "task1", "task2", "task3", "task4", "task5" ));
我有两组文件,我们称它们为base
和mods
。 mods
文件覆盖 base
文件,所以当我 运行 与 base
相关的 gulp 任务时,我需要 运行 mods
任务后直接。我的设置是这样的:
gulp.task('base',function(){
return gulp.src('base-glob')
.pipe(...)
.pipe(gulp.dest('out-glob'))
});
gulp.task('mods',function(){
return gulp.src('mods-glob')
.pipe(...)
.pipe(gulp.dest('out-glob'))
});
所以我想在 base
任务完成时 运行 mods
任务。请注意,这与将 base
定义为 mods
的依赖项不同,因为如果我只更改 mods
文件,我只需要 运行 mods
任务。我不想使用插件。
我一直在阅读有关回调函数的文档和同步任务的其他建议,但似乎无法理解它。
我知道您不想使用插件,但是 gulp 没有插件就无法按顺序 运行 执行一系列任务。 Gulp 4 will, but in the meantime the stopgap solution is the run-sequence 插件。
gulp.task('all', function() {
runSequence('base', 'mods');
});
这确保任务 运行 有序而不是无序依赖。
现在设置手表:
gulp.task('watch', function() {
gulp.watch('base-glob', ['all']);
gulp.watch('mods-glob', ['mods']);
});
每当 base-glob
改变时,gulp 将 运行 all
任务,这将 运行 序列 base
然后 mods
.
每当 mods-glob
更改时,gulp 将 运行 仅 mods
任务。
听起来对吗?
runSequence 有一些奇怪的错误,它一直抱怨我的任务没有定义。
如果您查看 Orchestrator 源代码,尤其是 .start()
实现,您会发现如果最后一个参数是一个函数,它会将其视为回调。
我为自己的任务编写了这个片段:
gulp.task( 'task1', () => console.log(a) )
gulp.task( 'task2', () => console.log(a) )
gulp.task( 'task3', () => console.log(a) )
gulp.task( 'task4', () => console.log(a) )
gulp.task( 'task5', () => console.log(a) )
function runSequential( tasks ) {
if( !tasks || tasks.length <= 0 ) return;
const task = tasks[0];
gulp.start( task, () => {
console.log( `${task} finished` );
runSequential( tasks.slice(1) );
} );
}
gulp.task( "run-all", () => runSequential([ "task1", "task2", "task3", "task4", "task5" ));