Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在客户端解析器中导入类型时,如何避免Apollo客户端和“graphql codegen”的angular项目中的循环依赖?_Angular_Typescript_Graphql - Fatal编程技术网

在客户端解析器中导入类型时,如何避免Apollo客户端和“graphql codegen”的angular项目中的循环依赖?

在客户端解析器中导入类型时,如何避免Apollo客户端和“graphql codegen”的angular项目中的循环依赖?,angular,typescript,graphql,Angular,Typescript,Graphql,我的目标是在使用Apollo客户端编写客户端解析器时使用生成的类型 客户端解析器中的所有内容都按照所述工作。但是,在该项目中,我们还使用生成的类型和GQL服务,如中所述。问题来了。如果从客户端解析器中生成的类型导入类型,则会出现以下错误: WARNING in Circular dependency detected: eddy.module.ts -> ...graphql.module.ts -> ...resolvers.ts -> ...client-spe

我的目标是在使用Apollo客户端编写客户端解析器时使用生成的类型

客户端解析器中的所有内容都按照所述工作。但是,在该项目中,我们还使用生成的类型和GQL服务,如中所述。问题来了。如果从客户端解析器中生成的类型导入类型,则会出现以下错误:

WARNING in Circular dependency detected:
eddy.module.ts ->
  ...graphql.module.ts ->
  ...resolvers.ts ->
  ...client-specific-recommendation-resolver.ts ->
  ...get-top-right-corner-state.ts ->
  ...graphql.ts -> // (generated types)
  ...eddy.module.ts

因此本质上是
获取右上角state.ts
文件中的,因为我是从生成的类型导入的,如下所示:

从“../../../../../generated/graphql”导入{Something};
注释

我们的应用程序将阿波罗加载到一个名为
graphql.module
的模块中,该模块由一个名为“eddy”的功能模块使用。我们已经在
codegen.yml
文件中配置了
ngModule
属性


我能做些什么来防止这种情况?我非常想在我的客户端解析器中使用由
graphql codegen
生成的类型。

在阅读并尝试了这个问题后,我找到了一个解决方案。设置实际上非常简单,但比仅在根目录中提供生成的服务要复杂一点

功能模块执行Apollo设置并创建客户端解析器。但不是在这里提供生成的服务,而是在另一个模块中提供它们,这里称为lazy-loaded.module.ts。codegen.yml现在看起来是这样的,并且没有循环依赖关系:

generates:
 <path-to-feature-module>/graphql.ts:
   schema: <path-to-client-schema>.ts
   documents: ./src/**/*.graphql
   config:
    ngModule: <path-to-lazy-loaded-module>#LazyLoadedModule
生成:
/graphql.ts:
架构:.ts
文件:./src/***/.graphql
配置:
ngModule:#懒散加载模块

延迟加载的模块然后由提供Apollo的功能模块导入,瞧,问题解决了,我将首先缩小以循环方式引用的问题的范围。您唯一的选择是重新思考您的设计(为什么要导入循环引用),或者在适当的情况下使用接口。我不知道是否可以更改
graphql codegen
生成的自动生成的文件,但即使我只导入一个接口或枚举,我有一个循环依赖。我会和graphql codegen的所有者一起打开一个bug。听起来问题是在他们这边,而不是你这边。好的,谢谢,我会尝试一下。好消息是它对你来说不是一个拦路虎。显然有些东西需要修复,但它们只是警告。