javascript - gulp 任务完成后运行函数的任何方法

标签 javascript gulp

我的 gulpfile 中有很多 gulp 任务,每个任务完成后我需要运行一个函数。

我这样处理我的任务注册:

var registerTask = function (taskName, dependencies, todo) {
  if (isProduction) {
    gulp.task(taskName, dependencies, todo);
  } else {
    var prefixedTaskName = '_' + taskName;

    // the original task registers here with another name
    gulp.task(prefixedTaskName, dependencies, todo);

    // register my task to do after the original task is done
    gulp.task(taskName, [prefixedTaskName], myRepeatedFunction);
  }
}

我像这样注册我的任务:

registerTask('foo', [], function () {
  gulp
    .src()
    .pipe()
    ...
})

但这使我的终端因日志(带下划线的任务名称)而变脏:

[15:54:17] Using gulpfile ~/Projects/xxx/gulpfile.js
[15:54:17] Starting '_default'...
[15:54:17] Starting '_remove-source-map'...
[15:54:17] Starting '_fontastic'...
[15:54:28] Finished '_fontastic' after 11 s
[15:54:28] Starting 'fontastic'...
[15:54:28] Finished 'fontastic' after 125 μs
[15:54:28] Starting '_js-hint'...
[15:54:28] Finished '_remove-source-map' after 11 s
[15:54:28] Starting 'remove-source-map'...
[15:54:28] Finished 'remove-source-map' after 59 μs
[15:54:28] Starting '_sass'...
[15:54:33] Finished '_sass' after 4.19 s
[15:54:33] Starting 'sass'...
[15:54:33] Finished 'sass' after 21 μs
[15:54:33] Finished '_js-hint' after 5.11 s
[15:54:33] Starting 'js-hint'...
[15:54:33] Finished 'js-hint' after 18 μs
[15:54:33] Starting '_js'...
[15:54:50] Finished '_js' after 17 s
[15:54:50] Starting 'js'...
[15:54:50] Finished 'js' after 17 μs
[15:54:50] Finished '_default' after 32 s
[15:54:50] Starting 'default'...
[15:54:50] Finished 'default' after 19 ms

我正在寻找一种更好的方法来完成同样的事情,而无需脏日志(我不想使用 --silent)

如果gulp.task中有回调,我可以以一种很好的方式做同样的事情。

最佳答案

Gulp继承了orchestrator的任务运行能力它提供了 .on()注册事件监听器的函数。

假设您有一个任务 foo 并希望在任务 foo 完成后运行一个函数。你可以这样做:

var gulp = require('gulp');

gulp.task('foo', function() {
  // do task stuff
});

gulp.on('task_stop', function(evt) {
  if (evt.task == 'foo') {
    // do stuff after task foo has finished
  }
});

为此,您必须确保您的异步任务 are properly signalling completion 。这意味着不要忘记返回流或在异步任务中调用回调函数!

关于javascript - gulp 任务完成后运行函数的任何方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39205720/

相关文章:

javascript - 在 HTML 中显示日志并显示缩进的更好方法是什么?

javascript - Gulp 文件生成根路径而不是相对路径

javascript - 当明确定义时,jshint 在 gulp 任务中抛出 TypeError

jquery - gulp 在.net core 中加载 bootstrap/jquery

javascript - 定时事件和 requestAnimationFrame 游戏循环

javascript - jQuery PHP 帖子

javascript - Math.random() 只调用一次数字

node.js - 如果不存在,如何使用 Browserify 创建新目录?

javascript - 选择包含空格的下拉选项

javascript - 根据条件显示和隐藏 html 组件而不使用 div