История:
У нас есть команда тестировщиков, работающих над автоматизацией сквозных тестов с использованием транспортира для нашего внутреннего приложения AngularJS. Вот задача, которую они обычно выполняют для локального тестирования:
grunt.registerTask('e2e:local', [
'build:prod',
'connect:test',
'protractor:local'
]);
Он запускает задачу "build", запускает веб-сервер и запускает тесты e2e против локальной сборки.
Задача build:prod
определяется как:
grunt.registerTask(
'build:prod', [
'clean',
'copy:all',
'copy:assets',
'wiredep',
'ngtemplates',
'useminPrepare',
'concat',
'ngAnnotate',
'autoprefixer',
'uglify',
'cssmin',
'copy:cssfix',
'usemin',
'copy:html',
'bowercopy',
'template:setProdVersion'
]
);
Здесь у нас есть много подзадач (его определенно можно было бы улучшить, но теперь это выглядит так).
Проблема:
В настоящее время для завершения сборки требуется около 25 секунд. И каждый раз, когда человек запускает сквозные тесты, выполняется задача сборки.
Вопрос:
Как запустить задачу build:prod
только в том случае, если в каталоге src
есть изменения?
Обратите внимание, что здесь требуется сделать его прозрачным для тестеров, которые запускают тесты. Я не хочу, чтобы они помнили, когда им нужно выполнить сборку, а когда нет.
Другими словами, процесс должен быть автоматизирован. Цель состоит в том, чтобы автоматически определить, нужна ли сборка или нет.
Обратите внимание, что в идеале я хотел бы оставить задачу сборки как есть, так что, если она вызывается непосредственно через grunt build:prod
, она будет перестраиваться независимо от datestamp предыдущей сборки.
Мысли и попытки:
-
существует тесно связанный
grunt-newer
пакет, но, поскольку у нас есть довольно сложная сборка, с задачейclean
в начале, Я не уверен, как применить его в моем случае -
о чем я также думал, внутри задачи
e2e:local
вручную проверять временные метки файлов внутриdist
иsrc
и, на основании этого, решить, требуется лиbuild:prod
для вызова. Я думаю, что это то, чтоgrunt-newer
делает внутренне -
мы начали использовать
jit-grunt
, что помогло улучшить производительность