在加载之前从模式中删除自定义指令

Posted

技术标签:

【中文标题】在加载之前从模式中删除自定义指令【英文标题】:Remove custom directives from schema before loading 【发布时间】:2021-09-04 07:05:50 【问题描述】:

我正在使用 graphql-codegentypescript-mongodb 插件从 qraphql 模式生成数据库模型文件。因此我的架构包含来自typescript-mongodb 的自定义指令,例如@entity@column。 codegen 工作正常,但是当我使用 graphql-tools loadSchemaSync 函数加载架构时,我收到一个架构验证错误,它抱怨未知指令。

可能最简单的解决方案是将 mongo 插件指令定义添加到架构中(我也无法开始工作)。但实际上没有任何理由在 graphql-codegen 生成配置文件后在模式中包含这些指令。

所以我想知道在将架构文件加载到可执行架构之前,是否有一些标准方法可以从架构中删除与 mongo 相关的指令作为中间步骤?

或者有没有办法告诉 loadSchemaSync 函数忽略“未知指令”错误?

这是我当前加载架构文件的代码:

import  join  from "path";
import loadSchemaSync, GraphQLFileLoader from "graphql-tools"

const schema = loadSchemaSync(join(__dirname, '../src/graphql/schemas/**/*.graphql'), 
  loaders: [
    new GraphQLFileLoader()
  ]
)

【问题讨论】:

【参考方案1】:

听起来您还没有将 mongo codegen 指令导入到您的架构中。

您应该知道 graphql-tools 已被弃用并且不会再收到更新。您应该使用适当的范围包,例如:https://www.npmjs.com/package/@graphql-codegen/typescript-mongodb

查看文档中的使用示例。

https://www.graphql-code-generator.com/docs/plugins/typescript-mongodb#usage-example

import  makeExecutableSchema  from '@graphql-tools/schema';
import  DIRECTIVES  from '@graphql-codegen/typescript-mongodb';

const schema = makeExecutableSchema(
  typeDefs: [
    DIRECTIVES,
    // the rest of your GraphQL types
  ],
  resolvers,
);

【讨论】:

以上是关于在加载之前从模式中删除自定义指令的主要内容,如果未能解决你的问题,请参考以下文章

自定义指令directive基础用法

angular2采用自定义指令(Directive)方式加载jquery插件

为啥自定义指令不能立即反映其代码的变化

Vue自定义指令

Vue 自定义图片懒加载指令v-lazyload

AngularJS 自定义表单验证指令在我的模式中不起作用