История:
У нас есть команда тестировщиков, работающих над автоматизацией сквозных тестов с использованием транспортира для нашего внутреннего приложения 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, что помогло улучшить производительность