使用 source_gen stack 来制作代码生成器,如何制作生成代码的生成器,该代码将作为另一个生成器的输入(更具体地说 json_serializable
)?
例如,考虑:
class Example extends Generator {
@override
String generate(LibraryReader library, BuildStep buildStep) {
return '''
@JsonSerializable(nullable: false)
class Person {
final String firstName;
final String lastName;
final DateTime dateOfBirth;
Person({this.firstName, this.lastName, this.dateOfBirth});
factory Person.fromJson(Map<String, dynamic> json) => _PersonFromJson(json);
Map<String, dynamic> toJson() => _PersonToJson(this);
}
''';
}
}
这是一个代码生成器的例子,它输出代码然后需要发送到
json_serializable
我该怎么做才能做到
json_serializable
在这里正确生成?
最佳答案
查看 build.yaml 配置文件文档以获取更多信息,但我认为您应该使用 applies_builders
param这允许在定义的构建之后执行另一个构建。
该示例显示了一个生成 .tar.gz 文件的构建器,然后执行另一个将 .tar.gz 文件作为输入的构建
builders:
# The regular builder config, creates .tar.gz files.
regular_builder:
import: "package:my_package/builder.dart"
builder_factories: ["myBuilder"]
build_extensions: {".dart": [".tar.gz"]}
auto_apply: dependents
apply_builders: [":archive_extract_builder"]
post_process_builders:
# The post process builder config, extracts .tar.gz files.
extract_archive_builder:
import: "package:my_package/extract_archive_builder.dart"
builder_factory: "myExtractArchiveBuilder"
input_extensions: [".tar.gz"]
所以与
source_gen
你应该为你的构建实现applies_builders: ["source_gen|combining_builder", "json_serializable"]
并配置另一个构建器
json_serializable:
import: "package:json_serializable/builder.dart"
builder_factories: ["jsonSerializable"]
build_extensions: {".dart": ["json_serializable.g.part"]}
auto_apply: dependents
build_to: cache
applies_builders: ["source_gen|combining_builder"]
关于flutter - 如何在另一个代码生成器的顶部运行代码生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59503994/