#graphql #graphql-tools #graphql-codegen
Вопрос:
Я использую graphql-codegen
typescript-mongodb
плагин with для создания файлов модели базы данных из схемы qraphql. И поэтому моя схема содержит пользовательскую директиву из typescript-mongodb
подобного @entity
и @column
. Кодовый генератор работает нормально, но затем, когда я загружаю схему с помощью 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-инструменты устарели и больше не будут получать обновления. Вы должны использовать соответствующие пакеты с областью действия, такие как: 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,
});