Я что-то искал о типах импорта из файлов .graphql. Я нашел graphql-import для импорта с помощью # import something from 'something-else'. Это отлично работает между файлами .graphql.
Но я пытаюсь импортировать немного types из generated.graphql из Prisma в файл .js.
Например:
У меня есть этот файл generated.graphql от Prisma
"""generated.graphql file"""
type ItemWhereInput { ... }
type ItemConnection { ... }
...
Я хотел бы импортировать эти два типа ItemWhereInput и ItemConnection из файла generated.graphql в файл items-types.js.
// items-types.js file
import gql from 'graphql-tag';
// I would like to make some kind of import ItemWhereInput and ItemConnection here
// Something like `import { ItemWhereInput, ItemConnection } from 'generated.graphql'`
...
const ItemWhereUniqueInput = gql`
input ItemWhereUniqueInput {
id: String!
}
`;
...
// And export ItemWhereInput and ItemConnection here
export default [Item, ItemInput, ItemWhereUniqueInput, ItemUpdateInput];
Таким образом, я мог вызвать makeExecutableSchema из graphql-tools и использовать эти типы в другом месте.
// items-query.js file
import { forwardTo } from 'prisma-binding';
const schema = `
items: [Item]!
item (where: ItemWhereUniqueInput!): Item
# And use it here
itemsConnection (where: ItemWhereInput): ItemConnection!
`;
const resolvers = {
items: forwardTo(‘db’),
item: forwardTo(‘db’),
itemsConnection: forwardTo(‘db’),
};
export default {
schema,
resolvers,
};
Если это где-то еще или есть что-то, что может помочь, укажите мне, пожалуйста.
Спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны уметь делать следующее:
На этапе сборки сначала преобразуйте файл generated.graphql в файл js с помощью
export default ` в начало файла,`); в конец файла иgenerated.js.Таким образом, вы можете импортировать файл так же, как файл js в код разработки:
// some other js file
/*
* notice the lack of .js, this should make it easier for your
* IDE to understand you're referencing the 'generated.graphql' file.
* If this is not possible in your code, you actually have to say
* .js here, not .graphql, because the file will be called .js after
* build.
*/
import generated from './generated';
console.info(generated);
Вы увидите, что schema - это строка содержимого этапа предварительной сборки файла.
Теперь его можно использовать как typeDef для makeExecutableSchema:
import { makeExecutableSchema } from 'graphql-tools';
import typeDefs from './generated';
import resolvers from './resolvers';
const schema = makeExecutableSchema({
typeDefs,
resolvers,
});
Если вы используете упаковщик и / или транспилятор, необходимо проделать некоторую дополнительную работу, чтобы убедиться, что файл также запускается с помощью этих инструментов. В проекте, в котором я использовал этот подход, используется только babel, с которым это связано:
Однако будьте осторожны с большими файлами, так как они загружаются в память с помощью этого метода!
Однако будьте осторожны, так как этот подход не работает с сборщиком, для которого вам придется либо преобразовать файл перед запуском сборщика (и каким-то образом все еще сохранить старую версию, возможно, назвав преобразованную версию по-другому и удалив ее после запуска сборщика). ) или найдите / создайте плагин, выполняющий эту работу за вас. Вот несколько вариантов, которые я нашел (быстрый поиск в Google): для webpack и Посылка.