flutter build_runner:针对 build.yaml 中的特定文件扩展名进行构建

mrg*_*t96 3 code-generation dart flutter build-runner

我想加快 build_runner 所需的构建时间,并且我还想在build watch编辑没有任何要生成的文件的文件时防止运行时重新构建。

我知道这需要在build.yaml文件中进行编辑,但我无法让任何东西发挥作用。

这是我的构建文件

targets:
  $default:
    builders:
      auto_route_generator:
        generate_for: 
          include: [".route.dart"]
      freezed:
        generate_for: 
          include: [".model.dart"]
      json_serializable:
        generate_for:
          include: [".model.dart"]
        options:
          explicit_to_json: true
          include_if_null: false
Run Code Online (Sandbox Code Playgroud)

即使尝试添加enabled: false(这让我相信它会禁用该依赖项的构建),也不会执行任何操作并且文件会继续生成。

也许我只是误解了构建文件应该如何使用......?

mrg*_*t96 9

我找到了解决方案。这是非常接近 igokom 的答案。

targets:
  $default:
    builders:
      auto_route_generator|autoRouteGenerator:
        enabled: true
        generate_for:
          include:
            - lib/infrastructure/routes/app_routes.routes.dart
          # [exclude] is not needed if at least one path is provided
          # in [include]. It will only target [include]d paths
          # exclude:
          #   - ...

      json_serializable:
        enabled: true
        generate_for:
          include:
            - lib/**.model.dart
            - lib/**_bloc.dart
            - lib/**_cubit.dart

        options:
          explicit_to_json: true
          include_if_null: false
      freezed|freezed:
        enabled: true
        generate_for:
          include:
            - lib/**.model.dart
            - lib/**_bloc.dart
            - lib/**_cubit.dart

      injectable_generator|injectable_builder:
        enabled: true
        generate_for:
          include:
            - lib/**_bloc.dart
            - lib/**_cubit.dart
            - lib/**.dao.dart

      injectable_generator|injectable_config_builder:
        enabled: true
        generate_for:
          include:
            - lib/infrastructure/injection/injection.dart
Run Code Online (Sandbox Code Playgroud)

我之前收到一条警告,内容如下 [WARNING] Configuring 'auto_route_generator:auto_route_generator' in target 'my_app:my_app' but this is not a known Builder

我收到此错误是因为生成器的名称auto_route不是auto_route_generator,而是autoRouteGenerator

build.yaml这些值可以在插件文件中找到

builders:
  # [autoRouteGenerator] is the name of the generator
  # that needs to be referenced
  autoRouteGenerator:
    import: "package:auto_route_generator/builder.dart"
    builder_factories: ["autoRouteGenerator"]
    build_extensions: {'.dart': ['.gr.dart']}
    auto_apply: dependents
    build_to: source
Run Code Online (Sandbox Code Playgroud)

目标可以在“$definingPackageName:$targetname”中引用。当目标名称与包名称匹配时,它也可以仅被称为包名称。每个包中的一个目标必须使用包名称,以便消费者默认使用它。在 build.yaml 文件中,可以使用键 $default 或包的名称来定义此目标。

您可以在此处找到有关它的更多信息这是一篇非常好的文章,为该build.yaml文件提供了一些很好的提示


v6对于那些使用auto_route_library

使用auto_route_generator|autoRouteBuilderauto_route_generator|autoRouterBuilder

可以参考v6-build.yaml