Вы должны быть в состоянии сделать следующее:
Во время шага сборки сначала преобразуйте файл 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.log(generated);
Вы увидите, что schema
- это строка содержимого файла перед сборкой.
Теперь его можно использовать как typeDef для makeExecutableSchema
:
import { makeExecutableSchema } from 'graphql-tools';
import typeDefs from './generated';
import resolvers from './resolvers';
const schema = makeExecutableSchema({
typeDefs,
resolvers,
});
Если вы используете упаковщик и / или транспортер, необходимо выполнить дополнительную работу, чтобы убедиться, что файл также проходит черезэти инструменты.В проекте, в котором я использовал этот подход, используется только babel, для чего необходимо:
- с использованием npm-watch вместо опции babel --watch для запуска сценария сборки
- (можно сделать параллельно)
- запуск babel для всех исходных файлов .js
- запуск специального сценария для всех файлов .graphql, который:
- добавляет соответствующиекод в файл, чтобы сделать его действительным js (в памяти)
- программно запускает babel с результатом
- сохраняет его в месте назначения сборки с расширением .js
Осторожно с большими файлами, так как они загружаются в память с помощью этого метода!
Однако остерегайтесь, так как этот подход не работает с упаковщиком, длякоторый вам придется либо преобразовать файл перед запуском пакета (и каким-то образом сохранить старую версию, возможно, по-разному назвав преобразованную версию и удалить ее после запуска пакета), либо найти / создать плагин, выполняющий эту работу для васОУ.Вот некоторые варианты, которые я нашел (быстрый поиск в Google): для webpack и Parcel .