Импорт типов из .graphql в файл .js - PullRequest
0 голосов
/ 22 октября 2018

Я искал что-то о типах импорта из .graphql файлов.Я нашел graphql-import для импорта с использованием # import something from 'something-else'.Это прекрасно работает между .graphql файлами.

Но я пытаюсь импортировать некоторые types из generated.graphql из Prisma в .js файл.

Например:

Iиметь этот 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,
};

Если это где-то еще или есть что-то, что может помочь, пожалуйста, укажите мне.

Спасибо.

1 Ответ

0 голосов
/ 01 апреля 2019

Вы должны быть в состоянии сделать следующее:

Во время шага сборки сначала преобразуйте файл generated.graphql в файл js путем

  1. , добавив export default ` кначало файла,
  2. `); до конца файла и
  3. , переименовав его в 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.log(generated);

Вы увидите, что schema - это строка содержимого файла перед сборкой.

Теперь его можно использовать как typeDef для makeExecutableSchema:

import { makeExecutableSchema } from 'graphql-tools';
import typeDefs from './generated';
import resolvers from './resolvers';

const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
});

Если вы используете упаковщик и / или транспортер, необходимо выполнить дополнительную работу, чтобы убедиться, что файл также проходит черезэти инструменты.В проекте, в котором я использовал этот подход, используется только babel, для чего необходимо:

  1. с использованием npm-watch вместо опции babel --watch для запуска сценария сборки
  2. (можно сделать параллельно)
    • запуск babel для всех исходных файлов .js
    • запуск специального сценария для всех файлов .graphql, который:
      1. добавляет соответствующиекод в файл, чтобы сделать его действительным js (в памяти)
      2. программно запускает babel с результатом
      3. сохраняет его в месте назначения сборки с расширением .js

Осторожно с большими файлами, так как они загружаются в память с помощью этого метода!

Однако остерегайтесь, так как этот подход не работает с упаковщиком, длякоторый вам придется либо преобразовать файл перед запуском пакета (и каким-то образом сохранить старую версию, возможно, по-разному назвав преобразованную версию и удалить ее после запуска пакета), либо найти / создать плагин, выполняющий эту работу для васОУ.Вот некоторые варианты, которые я нашел (быстрый поиск в Google): для webpack и Parcel .

...