加入我们,从10月8日至10日在纽约市,学习关于GraphQL联邦和API平台工程的最新的技巧、趋势和新闻。加入我们参加2024年的纽约市GraphQL峰会
文档
免费开始

多模块代码生成


对于多模块项目,

注意

此页面用于在模块间共享架构和在不同模块中定义您的

设置

在你的架构模块中,通过为下游功能模块生成元数据来启用多模块功能

// schema/build.gradle.kts
apollo {
service("service") {
packageName.set("schema")
// Enable generation of metadata for use by downstream modules
generateApolloMetadata.set(true)
// If you need to specify the location of your schema files
schemaFiles.from(/*...*/)
// Scalar mappings and generateDataBuilders must be defined in the schema module
mapScalar(/*...*/)
generateDataBuilders.set(true)
// Other options can be different between modules.
// If you want those options to be applied to all modules, use a convention plugin and shared build logic.
useSemanticNaming.set(true)
generateFragmentImplementations.set(true)
}
}

在你的功能模块中,将架构模块声明为依赖项

// feature/build.gradle.kts
apollo {
// Service names must match
service("service") {
packageName.set("feature")
// The 'feature' depends on the 'schema' module
dependsOn(project(":schema"))
}
}

自动检测使用的类型

对于大型架构,这可能会生成大量代码并显著增加您的构建时间。在这种情况下,您可以启用自动检测使用的类型。

// schema/build.gradle.kts
apollo {
service("service") {
packageName.set("schema")
generateApolloMetadata.set(true)
isADependencyOf(project(":feature"))
// list all your feature modules here
isADependencyOf(project(":feature2"))
// ...
}
}

一旦启用了自动检测已用类型的选项,就像上面那样,所有模块都需要是双向链接的。否则,功能模块会因为缺少架构类而无法编译。所有模块都应该像上面那样双向链接。如果不是这样,功能模块会因为缺少某些架构类而编译失败。

双向参数(实验性)

使用 isADependencyOf() 需要在架构模块中列出所有功能模块,这会重复代码。为了保持尽可能简单并自动配置依赖关系,请使用 bidirectional = true:

// feature/build.gradle.kts
apollo {
service("service") {
packageName.set("feature")
// Use `bidirectional` to have the schema module get the used types from this module
dependsOn(dependencyNotation = project(":schema"), bidirectional = true)
}
}

bidirectional 参数是实验性的,且与 Gradle 项目隔离 不兼容。

上一页
Gradle 插件食谱
下一页
文件类型
评分这篇文章评分在 GitHub 上编辑编辑论坛Discord

©2024Apollo Graph Inc.,名为 Apollo GraphQL。

隐私政策

公司