从gulp-watch的.on()事件运行任务

时间:2018-12-28 19:30:55

标签: javascript ecmascript-6 gulp

我试图在gulp中设置一个监视过程,该过程将修改后的文件作为参数。

我尝试使用gulp.watch()的“ .on('change'...)”钩子,因为似乎没有其他方法来获取触发该文件的文件的完整路径。观看事件。这使我可以访问已更改的文件,但是此时我不知道如何执行任务。我在其他地方读过gulp.start()曾经可以工作,但是从gulp 4.0开始,此功能似乎已被删除。

我还研究了gulp运行,并尝试从命令行执行任务,但似乎也无法正常工作。

这是我使用的内容的精简版本:

gulp.task("watch", function() {
    return gulp.watch("<path and filemask to watch>")
        .on("change", function(file) {
            runTaskHere(file);
        })
}

我可以通过命令行中的“ gulp watch”来运行此监视程序,然后修改路径和文件掩码中包含的文件。这一切都很好。我可以打印出file参数,它是正确的。从这一点上来说,我根本无法执行任务。如果我稍微改变一下代码,以便代替匿名函数,而是使用gulp.series()管道,任务将按预期执行,但我无权访问已修改文件的路径和文件名。

基本上,我要做的是根据修改后的文件的路径信息从gulpfile.js中手动运行gulp任务,并使其基本上从包装函数(.on(... )从手表上摘下)。我了解到gulp的设计师一直在努力摆脱这种模式,但是在某些情况下,我看不到任何替代方案。如果无法实现我在这里所做的事情,那么gulp中是否还有其他选项可以实现我在这里要做的事情?

我唯一的选择是为每个目录创建一个监视(基于我的解析规则),而忘记尝试读取路径信息吗?

2 个答案:

答案 0 :(得分:1)

由于gulp任务仅仅是函数,为什么不呢?

 function mytask() {
   // do something here
}

gulp.task("sometask", mytask)

然后您可以稍后通过调用函数来启动任务...

on("change", function(file) {
        mytask(file);
} 

答案 1 :(得分:0)

无论您要运行什么任务,都可以在on change事件中编写,我认为它将起作用。您还可以使用事件发射器类来帮助您发射事件,并在事件触发时运行任务。