[gruntjs] Как одновременно запускать две задачи


Answers

EDIT: logConcurrentOutput теперь имеет параметр logConcurrentOutput ! Подробнее здесь: https://github.com/sindresorhus/grunt-concurrent#logconcurrentoutput .

Watch - это странно параллельная, но блокирующая задача, поэтому вы должны быть творческими, чтобы работать с многозадачными функциями.

Параллельно теряет весь выход из задач часов, что не идеально.

Попробуйте динамически записать объект конфигурации в пользовательскую задачу:

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

Можно ли одновременно запускать две задачи просмотра?

Я понимаю, что у меня может быть какое-то количество задач, которые я хочу в настройках часовых настроек, и просто запускать часы для ворчания, и он будет смотреть их все, как это

...
watch: {
    A: {
        files: "js/dev/**/*.coffee",
        tasks: ["coffee", "requirejs"]
    },
    B: {
        files: "js/dev/**/*.coffee",
        tasks: ["coffee"]
    },
    C: {
        files: "js/dev/**/*.html",
        tasks: ["copy"]
    }
}
...

... но мне это не нужно. Я просто хочу иметь разные задачи для разработки и производства. Как вы можете догадаться, единственная разница между A (производство) и B (развитие) - это минимизация и конкатенация. Мне не нужно одновременно запускать задачи A и B.

Сначала я пришел с этой идеей

grunt.registerTask("prod", ["watch:A", "watch:C"]);
grunt.registerTask("dev", ["watch:B", "watch:C"]);

Но это не сработало. Только первые часы работают ( C никогда не работает). Можно ли делать то, что я хочу?




Параллельные работы отлично подходят для меня

concurrent: {
            options: {
                logConcurrentOutput: true
            },
            set1: ['watch:html', 'watch:styles'],
        },

grunt.registerTask('default', 'watch');
grunt.registerTask('htmlcss', ['concurrent:set1']);



grunt-concurrent или grunt-focus - оба хороших решения, но оба они ломают функциональность livereload .

Мое решение состоит в том, чтобы динамически составлять конфигурацию часов, при условии, что вы не будете одновременно запускать обе конфигурации.

Вы можете сделать что-то подобное

grunt.config.merge({
  watch: {
    options: {
      livereload: true
    },
    C: {
      files: "js/dev/**/*.html",
      tasks: ["copy"]
    }
  }
});

grunt.registerTask('watch-forProd', function () {
  grunt.config.merge({
    watch: {
      A: {
        files: "js/dev/**/*.coffee",
        tasks: ["coffee", "requirejs"]
      }
    }
  });

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

grunt.registerTask('watch-forDev', function () {
  grunt.config.merge({
    watch: {
      B: {
        files: "js/dev/**/*.coffee",
        tasks: ["coffee"]
      }
    }
  });

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

grunt.registerTask("prod", ["watch-forProd"]);
grunt.registerTask("dev", ["watch-forDev"]);




Related