给Flutter build_runner加速
Nov 2, 2024 — Flutter
Flutter 的 dart sdk是不带反射功能的,导致社区需要开发一些注解工具来辅助生成一些模板代码,大部分都是基于官方的build_runner (opens in a new window) 工具。
但是在构建的时候,每次都去生成模板代码,非常耗时。尤其是当你的项目比较大时,有可能超过1分多钟来等待处理完成,而且每次都得重新编译,非常影响开发效率。
另外,你用的生成库越多,越影响生成速度。
常见的一些支持注解的库有:
- freezed (opens in a new window)
- retrofit (opens in a new window)
- json_serializable (opens in a new window)
- mockito (opens in a new window)
- hive (opens in a new window)
- auto_route (opens in a new window)
- injectable (opens in a new window)
解决方案就是给每个库指定特定文件,而不是每个runner都扫描全部文件。
创建一个build.yaml文件,设置参考如下:
targets: $default: builders: freezed: enabled: true options: json: false generate_for: - lib/core/model/configuration.dart - lib/core/model/product.dart - lib/core/model/user.dart - lib/presentation/cubit/**/*_cubit.dart - lib/presentation/cubit/**/*_state.dart retrofit_generator|retrofit_generator: enabled: true generate_for: - lib/data/source/**/*api_source.dart json_serializable|json_serializable: enabled: true generate_for: - lib/data/source/**/dto/*dto.dart mockito|mockBuilder: enabled: true generate_for: - test/mocks/generate_mocks.dart hive_generator|hive_generator: enabled: true generate_for: - lib/data/source/persistent_storage/dto/*.dart auto_route_generator|auto_route_generator: enabled: true generate_for: - lib/presentation/app_router.dart - lib/presentation/page/**/*page.dart auto_route_generator|auto_router_generator: enabled: true generate_for: - lib/presentation/app_router.dart injectable_generator|injectable_builder: enabled: true generate_for: - lib/injection.dart - lib/core/use_case/**/*_use_case.dart - lib/data/repository/*_repository.dart - lib/data/service/*_service.dart - lib/data/source/**/*_source.dart - lib/presentation/cubit/**/*_cubit.dart - lib/presentation/app_router.dart