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

如何检查一个任务是否作为中另一个任务的依赖项运行gulp@4?,gulp,gulp-4,Gulp,Gulp 4,我使用gulpnotify在任务完成时触发通知。如果任务是独立运行的,则会触发该特定任务的通知。如果任务作为另一个任务的依赖项运行,则会触发所有依赖项的通知 在gulp@3,我使用包含正在运行的任务数组的gulp.seq检查任务是否作为依赖项调用。假设我有三个任务:default、style和scripts,后两个任务被设置为第一个任务的依赖项。运行gulp styles时,gulp.seq将包含['styles']。运行gulp(默认任务)时,gulp.seq将包含[“样式”、“脚本”、“默认

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

在gulp@3,我使用包含正在运行的任务数组的
gulp.seq
检查任务是否作为依赖项调用。假设我有三个任务:
default
style
scripts
,后两个任务被设置为第一个任务的依赖项。运行
gulp styles
时,
gulp.seq
将包含
['styles']
。运行
gulp
(默认任务)时,
gulp.seq
将包含
[“样式”、“脚本”、“默认”]
。知道了这一点,我随后检查了
gulp.seq.indexOf(“style”)>gulp.seq.indexOf(“default”)
,它告诉我是否
style
作为
default
任务的一部分运行

与gulp@4,似乎不再存在
gulp.seq
。我试着翻阅文档和源代码,但运气不好。它看起来像是
gulp.tree({deep:true})
()可能是我正在寻找的,但是我在其中没有看到任何返回有用信息的内容


中是否有相当于
gulp.seq
gulp@4?

API
gulp.seq
从来不是gulp公开的官方
道具。有了大口喝4,你就不能这么做了
gulp.tree({/**/})
不会为您解决此问题

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

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 styles
时,我可以检查
argv.\uu.indexOf(“styles”)>-1
,因为它包含
['styles']
。运行
gulp
(即默认任务)时,它包含
[]
。在我的测试中,这非常适合我的用例。

有趣的是,这让我想到了如何至少测试它。并行运行将是理想的,但我可以自己尝试解决。感谢您的指导,但我找到了如何对现有代码进行这一微小更改的方法。很好的解决方案-使用
includes
而不是
indexOf
argv.\uxincludes(“样式”)