gpt4 book ai didi

gulp - 如何检查任务是否作为 gulp@4 中另一个任务的依赖项运行?

转载 作者:行者123 更新时间:2023-12-04 21:30:37 25 4
gpt4 key购买 nike

我用 gulp-notify任务完成时触发通知。如果任务独立运行,则会触发该特定任务的通知。如果任务作为另一个任务的依赖项运行,则会触发所有依赖项的通知。

在 gulp@3 中,我使用 gulp.seq 检查任务是否作为依赖项被调用,其中包含正在运行的任务数组。假设我有三个任务:default , styles , 和 scripts ,后两个设置为第一个的依赖项。运行时 gulp styles , gulp.seq将包含 [ 'styles' ] .运行时 gulp (默认任务),gulp.seq将包含 [ 'styles', 'scripts', 'default' ] .知道这一点,我然后检查 gulp.seq.indexOf("styles") > gulp.seq.indexOf("default") ,它告诉我天气与否 styles作为 default 的一部分运行任务。

使用 gulp@4,似乎 gulp.seq不复存在。我试过在没有运气的情况下挖掘文档和源代码。好像gulp.tree({ deep:true }) ( docs ) 可能是我正在寻找的,但我没有看到任何返回任何有用的东西。

是否有等效的 gulp.seq在 gulp @4?

最佳答案

API gulp.seq从来都不是官方prop被 Gulp 暴露了。使用 Gulp 4,你不能这样做。 gulp.tree({ /* */ })不会为你解决这个问题。

话虽如此,如果您仍然需要查找某个任务是否在其他任务的管道中运行,那么您将必须使用以下内容使用您自己的包装器来装饰每个 gulp 任务:

let runTasks = [];

function taskWrapper(taskName, tasks, thisTask) {

let callbackTask;

function innerCallback(cb) {
runTasks.push(taskName);
cb();
}

if (thisTask) {
callbackTask = function(cb) {
thisTask(function () {
innerCallback(cb);
});
}
} else {
callbackTask = innerCallback;
}

const newTasks = [ ...tasks, callbackTask ];

gulp.task(taskName, gulp.series(newTasks));
}

// INSTEAD OF THIS
// gulp.task('default', gulp.series('style', 'script', function () { }));

// DO THIS
taskWrapper('default', ['style', 'script'], function(cb) {
console.log('default task starting');
cb();
});

注意:以上代码片段有限制。如果您使用监视模式,维护已执行任务的数组,即 runTasks将继续增长。另外, 它假设任务将始终按顺序运行。 对于并行模式,逻辑变得有点复杂。

最后,您还可以拥有一个 predefault进一步帮助它的任务:
taskWrapper('predefault', [], function(cb) {
// RESET runTasks
runTasks = [];
cb();
});

taskWrapper('default', ['predefault', 'style', 'script'], function(cb) {
console.log('default task starting');
cb();
});

另外,我怀疑 gulp-notify将与 Gulp 4 一起使用。

关于gulp - 如何检查任务是否作为 gulp@4 中另一个任务的依赖项运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53227692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com