17

2 つの異なるフォルダーを監視し、フォルダーごとに異なるタスクを実行するように監視タスクを構成できるかどうか疑問に思っていました。たとえば、/folder1 で何かが変更されるたびに task1 が実行され、/folder2 で何かが変更されるたびに task2 が実行されます。

フォルダ構造は次の形式です: root |-folder1 |-folder2

4

3 に答える 3

31

Watchはマルチタスクのように動作するため、さまざまなファイル セットを監視し、さまざまなタスクを実行するように構成できます。

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

次に、1 つまたは両方の監視タスクを実行できます。

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

テストしていませんが、動作するはずです。

于 2012-12-12T06:06:58.540 に答える
2

監視タスクを同時に実行する場合。ここにRobWによる優れたソリューションがあります 2つのうなり声の監視タスクを同時に実行する方法

私は解決策にたどり着くのに少し時間を費やしたので、その解決策のスニペットを次に示します。

カスタム タスクで構成オブジェクトを動的に書き込むことができます。

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');
});
于 2014-06-16T09:04:39.747 に答える
-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
                }
            }
        }

次に、便利なように focus:sources または focus:testu を使用します。

JM。

于 2014-05-09T08:33:26.117 に答える