Javascript 通过grunt contrib watch查看目录时,如何检索更改的文件名?

Javascript 通过grunt contrib watch查看目录时,如何检索更改的文件名?,javascript,node.js,gruntjs,Javascript,Node.js,Gruntjs,假设我有一个CSS文件目录,我的Grunt watch任务配置如下: watch: { css: { files: ['css/*.css'], tasks: ['foo'] } } 其中foo是我自己的自定义任务: grunt.registerTask('foo', function () { // but which file changed? }); 因此,每当该目录中的任何CSS文件发生更改时,Grunt都会调用我的foo任务。

假设我有一个CSS文件目录,我的Grunt watch任务配置如下:

watch: {
    css: {
        files: ['css/*.css'],
        tasks: ['foo']
    }
}
其中
foo
是我自己的自定义任务:

grunt.registerTask('foo', function () {
    // but which file changed?
});

因此,每当该目录中的任何CSS文件发生更改时,Grunt都会调用我的
foo
任务。我想从我的任务中检索受影响的CSS文件(已更改的文件)的文件名。我希望这是可能的。

该任务会发出一个监视事件,您可以监听它。下面是一个例子:


我在watch插件的自述文件中找到了解决方案:

grunt.event.on('watch', function(action, filepath, target) {
  grunt.log.writeln(target + ': ' + filepath + ' has ' + action);
});
因此,每当触发监视任务时,它都会触发一个
“监视”
事件。这使我们能够处理该事件并检索作为第二个参数提供的已更改文件的文件名。我已经检查过了,这个事件处理程序将在watch任务的配置中设置的任务之前运行(
foo
,在上面的代码中),所以我们是golden


评论:不过我希望有一个更精简的解决方案。为什么watch任务不能直接向通过参数调用的任务提供文件名?这个“watch”处理程序在我看来不是最佳的代码模式。

是的,我找到了。这似乎是检索文件名的唯一方法。虽然我对这种代码模式不满意,但我别无选择,只能使用它。请查看这种建议的方法,以更好地简化它:@KyleRobinsonYoung我已经发布了一条评论。就在昨天,我在手表任务中添加了grunt更新。作品伟大;这似乎是一个比目前提议的更好的方法。
grunt.event.on('watch', function(action, filepath, target) {
  grunt.log.writeln(target + ': ' + filepath + ' has ' + action);
});