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

时间:2013-12-29 21:22:44

标签: javascript node.js gruntjs

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

watch: {
    css: {
        files: ['css/*.css'],
        tasks: ['foo']
    }
}

其中foo是我自己的自定义任务:

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

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

2 个答案:

答案 0 :(得分:2)

任务会发出您可以收听的观看事件。 readme中有一个例子:

grunt.event.on('watch', function(action, filepath, target) {
  grunt.log.writeln(target + ': ' + filepath + ' has ' + action);
});

答案 1 :(得分:1)

我在手表插件的README文件中找到了解决方案:

grunt.event.on('watch', function(action, filepath, target) {
  grunt.log.writeln(target + ': ' + filepath + ' has ' + action);
});

因此,每当触发监视任务时,它都会触发"watch"事件。这使我们能够处理该事件并检索作为第二个参数提供的已更改文件的文件名。我已经检查过,这个事件处理程序将运行之前在监视任务的配置中设置的任务(我上面的代码中为foo),所以我们是金色的。

评论:我希望能提供更简化的解决方案。为什么watch任务不能直接将文件名提供给它通过参数调用的任务?这个“监视”处理程序不是最佳代码模式IMO。