【问题标题】:Run Gulp 4 task programmatically以编程方式运行 Gulp 4 任务
【发布时间】:2019-08-24 00:58:05
【问题描述】:

在 gulpfile.js 中有几个用gulp.task 定义的任务:

gulp.task('sync-task', () => { ... });
gulp.task('async-task', cb => { ... });

我想以编程方式启动其中一个。最好在同一个进程中(没有exec等),因为这背后的原因之一是能够在调试器中运行脚本。

如何做到这一点?

看起来像 gulp.rungulp.start 这样的东西,但它们在 Gulp 4 中已被弃用。

【问题讨论】:

    标签: node.js gulp gulp-4


    【解决方案1】:

    看来可以用gulp.task getter 函数检索任务并直接调用:

    gulp.task('sync-task')();
    gulp.task('async-or-random-task')(function callbackForAsyncTasks(err) {
      if (err)
        console.error('error', err);
    });
    

    【讨论】:

    • @Daniel 答案考虑了 Gulp 4 的发行版。它适用于 Gulp 4.0.0,只要这些任务之前定义为 gulp.task('sync-task', () => {...})
    • 好的,我认为答案将受益于这样做的代码,所以很清楚......
    • 这可行,但是,我没有像通过 gulp 执行任务时那样获得控制台输出。我希望输出[12:00:00] Starting 'sync-task'...[12:00:01] Finished 'sync-task' after 1000 ms,但我不明白。这还有可能吗,如果可以,怎么做?
    【解决方案2】:

    添加到已接受的答案:

    是的,您可以通过调用gulp.task 来检索任务,但您可以将其包装在对gulp.series 的调用中(大概gulp.parallel 也可以)并调用。这有利于产生预期的“开始/完成”输出。一个例子是:

    gulp.series(gulp.task('some-task'))();
    

    输出:

    [09:18:32] Starting 'some-task'...
    [09:18:32] Finished 'some-task' after 7.96 ms
    

    这是刚刚在 gulp v4.0.2 上测试过的。

    【讨论】:

    【解决方案3】:

    我可以通过这样做来运行任务:

    gulp.task('sync-task').unwrap()();
    

    【讨论】:

    • the gulp.task('sync-task').unwrap() 返回原来的任务函数 但它不是作为 Gulp 任务函数调用的(仅限同步调用),语法上调用 Gulp 任务最简单的方法是使用 parallel(task1, ...)() 或 @987654324 @ 方法(来自 Gulp:v4.0.0 不鼓励使用 task() 方法(但支持))
    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多