..

Дополнение про оптимизацию работы build_runner

Читать в Telegram

Видео с примерами оптимизации build_runner

YouTube падает при ответе на ваши комментарии, поэтому соберу их тут.

1️⃣ Зачем вообще нужна оптимизация build_runner? Вы сами себе все усложняете

Если на проект большой, и над ним работает большая команда - неизбежны конфликты при слиянии веток. Это относится как к небольшим классам (типа пользователя или товара, например), так и к DI, где сгенерированный файл может насчитывать тысячи строк кода, которые руками не поправишь при наличии конфликтов. Как итог - нужно запускать билд заново, а это лишнее время. Добавить к этому ситуацию, когда в репозитории слетаю аппрувы при новых коммитах - на небольшое исправление уйдет куча времени, и в лучшем случае за прошедшие десятки минут не придут чьи-то правки, которые сломают ваши текущие.

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

Есть еще раздел в документации build_runner. Там советуют не хранить ничего сгенерированного в репозитории, но это лишь совет, а не правило работы с билдером.

2️⃣ Какие еще есть способы запуска build_runner? Для отдельного файла, пакета, есть возможность билда?

Можно запустить build_runner с параметром –build-filter, который будет работать только с тем скоупом, что вы туда ему передадите.

❗️ Все примеры ниже применимы к проекту, которые разбирается в видео. Запуск происходит так же, как в видео (через fvm). Для использования на ваших примерех нужно заменить значение –build-filter на то, что у вас локально.

Для файла пример будет такой:

$ fvm flutter pub run build_runner build --build-filter="lib/cp_one/one/model_gen.g.dart"

Директорию можно обработать следующим образом:

$ fvm flutter pub run build_runner build --build-filter="lib/cp_one/**/*.g.dart" 

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