在工作中,我们正在构建一个利用不同团队制作的库的大型项目。我们在使用 Apollo-Angular 时遇到了一个问题,因为当使用 APOLLO_NAMED_OPTIONS 导入带有自己的 graphql 模块的单个模块时,它可以正常运行。但是,如果特定应用程序需要使用自己的 graphql 模块导入多个模块,则似乎有些东西正在发生冲突。我们收到一个错误,其中仅加载了单个文件中的命名选项,导致许多服务和组件因缺少 graphql 名称的错误而中断。
我做了一个 Stackblitz 来演示基本缺陷,但是其他 graphql 模块与其他组件和库捆绑在一起,而不是像我的 Stackblitz 示例中那样并排。
GraphQL 模块 #1:
import { NgModule } from '@angular/core';
import { APOLLO_NAMED_OPTIONS, NamedOptions } from 'apollo-angular';
import { InMemoryCache } from '@apollo/client/core';
import { HttpLink } from 'apollo-angular/http';
@NgModule({
providers: [
{
provide: APOLLO_NAMED_OPTIONS,
useFactory(httpLink: HttpLink): NamedOptions {
return {
appList: {
cache: new InMemoryCache(),
link: httpLink.create({
uri: 'https://graphql-voter-app.herokuapp.com/";',
}),
defaultOptions: {
query: {
fetchPolicy: 'no-cache',
},
watchQuery: {
fetchPolicy: 'no-cache',
},
},
},
};
},
deps: [HttpLink],
},
],
})
export class AppListGraphQLModule {}
GraphQL 模块 #2:
import { NgModule } from '@angular/core';
import { APOLLO_NAMED_OPTIONS, NamedOptions } from 'apollo-angular';
import { InMemoryCache } from '@apollo/client/core';
import { HttpLink } from 'apollo-angular/http';
@NgModule({
providers: [
{
provide: APOLLO_NAMED_OPTIONS,
useFactory(httpLink: HttpLink): NamedOptions {
return {
switchFauna: {
cache: new InMemoryCache(),
link: httpLink.create({
uri: 'https://graphql-voter-app.herokuapp.com/',
}),
defaultOptions: {
query: {
fetchPolicy: 'no-cache',
},
watchQuery: {
fetchPolicy: 'no-cache',
},
},
},
};
},
deps: [HttpLink],
},
],
})
export class GameGraphQLModule {}
堆栈闪电战:
在示例中,只能从一个 graphql 模块中找到一个命名选项。