我试图在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中是否还有其他选项可以实现我在这里要做的事情?
我唯一的选择是为每个目录创建一个监视(基于我的解析规则),而忘记尝试读取路径信息吗?
答案 0 :(得分:1)
由于gulp任务仅仅是函数,为什么不呢?
function mytask() {
// do something here
}
gulp.task("sometask", mytask)
然后您可以稍后通过调用函数来启动任务...
on("change", function(file) {
mytask(file);
}
答案 1 :(得分:0)
无论您要运行什么任务,都可以在on change事件中编写,我认为它将起作用。您还可以使用事件发射器类来帮助您发射事件,并在事件触发时运行任务。