Как предотвратить повторную загрузку grunt при обновлении нескольких файлов?

У меня есть грубое задание с несколькими подзадачами для просмотра LESS, CoffeeScript и т. Д.

    watch:
        jade:
            files: ['<%= yeoman.app %>/*.jade']
            tasks: ['jade']
        less:
            files: ['<%= yeoman.css %>/*.less']
            tasks: ['less']
        coffee:
            files: ['<%= yeoman.scripts %>/*.coffee']
            tasks: ['coffee']
        edge:
            files: ['<%= yeoman.comp %>/*']
            tasks: ['edge']
        livereload:
            options:
                livereload: true
            files: [
                '<%= yeoman.app %>/*.html'
                '<%= yeoman.css %>/*.css'
                '<%= yeoman.scripts %>/*.js'
            ]

У меня также есть собственное задание, которое я написал и которое отвечает за обработку набора сторонних файлов, которые часто обновляются. Задача обновляет несколько путей в сторонних файлах javascript и html, а затем перераспределяет их в соответствующие места в основном проекте.

Проблема заключается в том, что когда каждый из этих файлов записывается в место назначения, запускается соответствующая задача grunt, каждый из которых запускает перезагрузку в реальном времени. Таким образом, если записано 4 файла, происходит 4 отдельных перезагрузки.

Есть ли способ настроить задачу наблюдения, чтобы объединить все живые события перезагрузки в одну перезагрузку на "конце"?

1 ответ

Я не пробовал это лично, но вы можете найти что -то очень интересное. Если вы пишете пользовательскую задачу, вы можете отправить запрос на сервер tiny-lr для перезагрузки нескольких файлов одновременно (вы можете сделать это через что-то вроде grunt-shell):

# notify a single change
curl http://localhost:35729/changed?files=style.css

# notify using a longer path
curl http://localhost:35729/changed?files=js/app.js

# notify multiple changes, comma or space delimited
curl http://localhost:35729/changed?files=index.html,style.css,docs/docco.css

Я не уверен, что стандартный конфиг делает то, что вам нужно, сам по себе, но его стоит попробовать:

grunt.loadNpmTasks('tiny-lr');
grunt.initConfig({
  watch: {
    reload: {
      files: ['**/*.html', '**/*.js', '**/*.css', '**/*.{png,jpg}'],
      tasks: 'tinylr-reload'
    }
  }
});

grunt.registerTask('reload', ['tinylr-start', 'watch']);

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

Надеюсь это поможет.

Другие вопросы по тегам