完成其他任务后运行 gulp 任务

Posted

技术标签:

【中文标题】完成其他任务后运行 gulp 任务【英文标题】:Run gulp task after completion of other task 【发布时间】:2015-04-09 15:15:00 【问题描述】:

我有两组文件,我们称它们为basemodsmods文件覆盖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 任务。我不想使用插件。

我一直在阅读有关回调函数和其他同步任务建议的文档,但似乎无法理解它。

【问题讨论】:

您有相互冲突的要求。您希望modsbase 之后运行,但您只希望mods 在仅更改mods 文件的情况下自行运行?这完全没有意义。 对不起,我不清楚。我有两个用例:当base 文件更改时,我想运行base 然后mods。当mods 文件更改时,我只想运行mods 我想只是想确定一下。请参阅下面的答案。 How to run Gulp tasks synchronously/one after the other 的可能重复项 【参考方案1】:

我知道你不想使用插件,但是 gulp 没有办法在没有插件的情况下按顺序运行一系列任务。 Gulp 4 will,但同时权宜之计是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 任务。

这听起来对吗?

【讨论】:

这对我有用,谢谢!值得注意的是,有一个更新版本的 gulp-run-sequence 被称为 run-sequence【参考方案2】:

runSequence 有一些奇怪的错误,它一直抱怨我的任务没有定义。

如果您查看 Orchestrator 源代码,尤其是 .start() 实现,您会发现如果最后一个参数是一个函数,它会将其视为回调。

我为自己的任务编写了这个 sn-p:

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

【讨论】:

以上是关于完成其他任务后运行 gulp 任务的主要内容,如果未能解决你的问题,请参考以下文章

在 gulp 任务后无法在 vscode 上为 typescript 运行调试器,调试器运行未编译的代码

在Visual Studio 2015中启动IIS Express会话后,如何运行gulp任务

gulp

Gulp入门教程

Gulp 循环配置文件和合并任务...慢

如何使用键盘快捷键运行Gulp任务