在 gulpfile 我想写类似
watch = require 'gulp-watch'
gulp.task 'mytask', ->
gulp.src '*.txt'
.pipe watch('*.txt')
.pipe gulp.trigger('echo')
.pipe gulp.dest('tmp')
因此每次更改文本文件时都应启动任务“回声”。请注意,我希望任务“echo”只启动一次,即使修改了两个或更多文件。
我是在gulp.trigger
网上搜索时发现的,但它似乎是一个已弃用的功能。在任何情况下,上面的代码都会产生TypeError: Object #<Gulp> has no method 'trigger'
那么有没有办法以这种方式触发任务呢?
PS原则上,一个可以解决的方法是
watch '*.txt', ->
runSequence(...)
但这种方式不是增量的(据我所知)。我只想将修改后的文件放入 tmp 中。
UPD。看来我找到了更好的解决方法:
transform = require('vinyl-transform')
map_stream = require('map-stream')
run_sequence = require('run-sequence')
gulp.task 'mytask', ->
mytrigger = transform (filename) ->
run_sequence('echo')
map_stream (chunk, next) -> next(null, chunk)
gulp.src '*.txt'
.pipe watch('*.txt')
.pipe mytrigger
.pipe gulp.dest('tmp')
所以我将任务'echo'包装成一个流。但也许有更优雅的方式?