2012-12-12 27 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'); 
});