Как предотвратить повторную загрузку 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, который запускает задачи только на основании измененных файлов. Я использую это с моими настройками часов, и это экономит много времени, потому что не нужно обрабатывать каждый файл каждый раз, когда сохраняется только один файл.
Надеюсь это поможет.