2012-12-12 29 views
17

我想知道是否可以配置观察任务来观察两个不同的文件夹并对每个文件夹执行不同的任务。例如,无论什么时候改变/ folder1,那么task1都应该执行,只要/ folder2中的内容发生变化,就应该执行task2。Gruntjs观看不同的文件夹并执行任务

的文件夹结构如下形式: 根 | -folder1 | -folder2

回答

30

观看行为就像一个多任务,所以是你可以配置它来观看不同的文件集和执行不同的任务

watch:{ 
    set1: { 
    files: [ 'folder1/**/*' ], //<- this watch all files (even sub-folders) 
    tasks: ['task1'] 
    }, 
    set2: { 
    files: ['folder2/**/*'], 
    tasks: ['task2'] 
    } 
}, 

然后你可以运行一个手表任务或两个

grunt.registerTask('watchSet1', ['watch:set1']); 
grunt.registerTask('watchSet1And2', ['watch:set1', 'watch:set2']);  

没有测试过,但应该可以工作。

+0

因此,当两个任务完成时watchSet1and2会被执行吗? – chchrist

+0

不,这是如何运行这两个任务的示例。你可以从命令行调用'grunt watchSet1And2',两个手表都会启动。 – jaime

+1

谢谢,工作得很好。我也注意到可以运行只是监视任务(grunt watch)。如果在任何观看的文件夹中修改了文件,它将运行适当的任务。 – markovuksanovic

-1

最好的和唯一的工作液有:https://npmjs.org/package/grunt-focus添加这个插件,然后:

focus: { 
      sources: { 
       include: ['js', 'html', 'css', 'grunt'] 
      }, 
      testu: { 
       include: ['js', 'html', 'css', 'testu', 'grunt'] 
      }, 
      testi: { 
       include: ['js', 'html', 'css', 'testu', 'testi', 'grunt'] 
      } 
     }, 
     watch: { 
      js: { 
       files: paths.js, 
       tasks: ['jshint'], 
       options: { 
        livereload: true 
       } 
      }, 
      html: { 
       files: paths.html, 
       options: { 
        livereload: true 
       } 
      }, 
      css: { 
       files: paths.css, 
       tasks: ['csslint'], 
       options: { 
        livereload: true 
       } 
      }, 
      testu: { 
       files: ['test/**/*.js', 'test/**/*.css'], 
       tasks: ['mochaTest'], 
       options: {} 
      }, 
      testi: { 
       files: ['test/**/*.js', 'test/**/*.css'], 
       tasks: ['exec:cleanTestDB', 'protractor_webdriver', 'protractor'], 
       options: {} 
      }, 
      grunt: { 
       files: ['Gruntfile.js', 'server/config/env/*.js'], 
       options: { 
        reload: true 
       } 
      } 
     } 

然后使用重点:来源或聚焦:TESTU为您提供方便。

JM。

2

如果您想让监视任务同时运行。有一个很好的解决方案RobW这里How to run two grunt watch tasks simultaneously

我花了一些时间去解决方案,所以这里是该解决方案的片段。

在定制任务中动态地写配置对象。

grunt.registerTask('watch:test', function() { 
    // Configuration for watch:test tasks. 
    var config = { 
    options: { 
     interrupt: true 
    }, 
    unit: { 
     files: [ 
     'test/unit/**/*.spec.coffee' 
     ], 
     tasks: ['karma:unit'] 
    }, 
    integration: { 
     files: [ 
     'test/integration/**/*.rb', 
     '.tmp/scripts/**/*.js' 
     ], 
     tasks: ['exec:rspec'] 
    } 
    }; 

    grunt.config('watch', config); 
    grunt.task.run('watch'); 
});