将参数或数据从观察者传递到任务的一种可能的方式是通过使用全局变量,或者在两个块作用域中都存在的变量。以下是一个示例:
gulp.task('watch', function () {
watch('./app/tempGulp/json/**/*.json', function (evt) {
jsonCommentWatchEvt = evt;
gulp.start('jsonComment');
})
})
var jsonCommentWatchEvt = null
gulp.task('jsonComment', function () {
jsonComment_Task(jsonCommentWatchEvt)
})
以下是执行任务的函数,如果有兴趣可以了解一下,但我并不需要将工作放在另一个函数中,我可以直接在任务中实现它。至于文件,您有全局变量,这里是jsonCommentWatchEvt
。但是,如果您不像我这样使用函数,则一个好的做法是将全局变量的值分配给一个本地变量,您将使用该变量。并且您需要在任务的所有顶部条目中执行此操作,以避免使用全局变量本身,并避免它被当前运行任务的另一个监视处理触发更改的问题。
function jsonComment_Task(evt) {
console.log('handling : ' + evt.path);
gulp.src(evt.path, {
base: './app/tempGulp/json/'
}).
pipe(stripJsonComments({whitespace: false})).on('error', console.log).
on('data', function (file) {
var str = file.contents.toString()
var stream = source(path.basename(file.path))
stream.end(str.replace(/\n\s*\n/g, '\n\n'))
stream.
pipe(gulp.dest('./app/json/')).on('error', console.log)
})
}
我有一个不同json文件的目录,其中我将在它们上使用注释。我正在监视它们。当文件被修改时,观察处理被触发,然后我只需要处理被修改的文件。为了删除注释,我使用了json-comment-strip插件。此外,我还需要进行更多的处理,以删除多个连续的换行符。
无论如何,首先我需要将文件路径传递给可以从事件参数中恢复的文件。
我通过全局变量将其传递给任务,该变量仅执行此操作。允许传递数据。
注意:尽管这与问题没有关系,在我的示例中,我需要处理从插件处理中获取的流。我使用了
on("data"
事件。它是异步的。因此,在工作完全结束之前,任务将标记结束(任务到达结束,但启动的异步函数将继续处理一段时间)。因此,您在控制台上获得的时间是任务块结束的时间,而不是整个处理的时间。你知道就好了。对我来说没关系。