Ошибка при использовании генератора исходного кода из пакета генератора исходного кода

Я пишу генератор исходного кода dart, который использует json_serializable для некоторых моделей. Первоначально генерация исходного кода некоторое время работала нормально, но теперь, когда я запускаю dart run build_runner build --delete-conflicting-outputsЯ получаю сообщение об ошибке:

[INFO] Генерация скрипта сборки завершена, заняло 410 мс
[INFO] Чтение графа ресурсов из кэша завершено, заняло 62 мс
[INFO] Проверка обновлений с момента завершения последней сборки заняла 492 мс
[ВНИМАНИЕ] Недействительный график активов из-за обновления скрипта сборки!
[INFO] Очистка результатов предыдущих сборок. завершено, заняло 4 мс
[ИНФОРМАЦИЯ] Генерация скрипта сборки завершена, заняло 79 мс
[ПРЕДУПРЕЖДЕНИЕ] Предварительно скомпилированный скрипт сборки признан недействительным из-за отсутствия графа ресурсов.
[ПРЕДУПРЕЖДЕНИЕ] lib/settings/config.dart:3:6: Ошибка: ошибка при чтении «lib/settings/config.g.dart»: нет такого файла или
части каталога «config.g.dart»;
^
lib/settings/config.dart:3:6: Ошибка: нельзя использовать 'lib/settings/config.g.dart' как часть, так как в ней нет объявления "часть".
часть 'config.g.dart';
^
[INFO] Предварительная компиляция сценария сборки... завершена, заняла 785 мс
[СЕРЬЕЗНОЕ] Не удалось выполнить предварительную компиляцию сценария сборки .dart_tool/build/entrypoint/build.dart. Вероятно, это вызвано неправильно настроенным определением построителя.

Вот зависимости для моего пакета:

      dependencies:
  path: ^1.8.1
  yaml: ^3.1.0
  dotenv: ^3.0.0
  recase: ^4.0.0
  json_annotation: ^4.4.0
  code_builder: ^4.1.0

  dart_style: ^2.2.1

dev_dependencies:
  lints: ^1.0.0
  test: ^1.20.1
  build_runner: ^2.1.7
  json_serializable: ^6.1.3

А build.yaml выглядит так:

      builders:
  map_gen:
    import: "package:map_gen/map_gen.dart"
    builder_factories: [ "build" ]
    build_extensions: { "$lib$": [ ".map.dart" ] }
    auto_apply: dependents
    build_to: source

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

Редактировать

Я использую vscode, но я пытался построить из терминала и также получил ту же ошибку. Даже после бега flutter clean | dart pub get | dart run build_runner build --delete-conflicting-outputsтакая же ошибка сохраняется.

Текущий обходной путь

В настоящее время я вручную создаю файл и добавляю part ofоператор вручную, запуск после которого приводит к успешному созданию исходного кода. Однако, если я бегу build_runnerснова после того, как я связал сгенерированные методы с моим кодом, .g.dartфайлы удаляются, и снова я сталкиваюсь с той же ошибкой. Мне приходится повторять этот процесс каждый раз, когда я хочу создать исходный код.

1 ответ

Я столкнулся с точно такой же проблемой и получил помощь от создателя Drift in Dart Build в чате Gitter . Цитирую решение здесь:

вы можете просто создать пустой файл в каталоге вашего пакета. Этот специальный файл build.yaml будет использоваться только тогда, когда сборка запускается из каталога вашего пакета. Для системы сборки это будет выглядеть так, как будто ваших сборщиков просто не существует (и, следовательно, она не будет пытаться их скомпилировать). Когда вы запускаете сборку из других пакетов, которые зависят от вашего пакета компоновщика, <project_directory>.build.yamlфайл игнорируется, и все ваши строители находятся там.

Вы можете обратиться к тому, как Drift делает это здесь .

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