2012-12-12 13 views
17

Mi chiedevo se è possibile configurare un'attività di controllo per vedere due cartelle diverse ed eseguire un'attività diversa su ciascuna cartella. Ad esempio, ogni volta che qualcosa cambia è/folder1, allora deve essere eseguito task1, ogni volta che qualcosa viene modificato in/folder2, quindi deve essere eseguito task2.Gruntjs guarda cartelle diverse ed esegue attività

La struttura delle cartelle è il seguente modulo: radice | -folder1 | -folder2

risposta

30

Guarda si comporta come un multi-task, quindi sì è possibile configurarlo per guardare diversi tipi di file e eseguire diversi compiti

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

Quindi è possibile eseguire un compito orologio o entrambi

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

Non sono stati testati, ma dovrebbe funzionare.

+0

Quindi watchSet1and2 verrà eseguito quando entrambe le attività sono terminate? – chchrist

+0

No, questo è un esempio su come eseguire entrambe le attività. Chiamerai 'grunt watchSet1And2' dalla riga di comando e inizieranno entrambi gli orologi. – jaime

+1

Grazie, ha funzionato bene. Ho anche notato che è possibile eseguire solo attività di sorveglianza (grunt watch). Avvia compiti corretti se i file vengono modificati in una delle cartelle controllate. – markovuksanovic

-1

La migliore e unica soluzione di lavoro è lì: https://npmjs.org/package/grunt-focus Aggiungi questo plugin e poi:

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 
       } 
      } 
     } 

quindi si utilizza fuoco: fonti o messa a fuoco: testu come vostra convenienza.

JM.

2

Se si desidera che le attività di controllo vengano eseguite contemporaneamente. C'è una grande soluzione per RobW qui How to run two grunt watch tasks simultaneously

Ho passato un po 'di tempo per arrivare alla soluzione, quindi ecco il frammento di quella soluzione.

La scrittura dinamica di un oggetto di configurazione in un'attività personalizzata funziona.

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'); 
}); 
Problemi correlati