我正在使用带有Node的Apollo graphql-server-express
,我想将我的“typedef”架构定义文件转换为.graphql or .gql
文件,以便清晰和语法高亮。
最好的方法是什么?我在Babel(?)之外找不到任何好的资源,这似乎是唯一的选择。
非常感谢你的帮助!
答案 0 :(得分:5)
我确定您已经找到了解决方案,但是对于其他人来说这可能会有所帮助 https://github.com/prismagraphql/graphql-import。
import { importSchema } from 'graphql-import'
import { makeExecutableSchema } from 'graphql-tools'
const typeDefs = importSchema('schema.graphql')
const resolvers = {}
const schema = makeExecutableSchema({ typeDefs, resolvers })
假定以下目录结构:
.
├── a.graphql
├── b.graphql
└── c.graphql
a.graphql
# import B from "b.graphql"
type A {
# test 1
first: String
second: Float
b: B
}
b.graphql
# import C from 'c.graphql'
type B {
c: C
hello: String!
}
c.graphql
type C {
id: ID!
}
答案 1 :(得分:2)
将express-graphql
与TypeScript结合使用时的解决方案:
import {buildSchema} from 'graphql';
import graphqlHTTP from 'express-graphql';
import {importSchema} from 'graphql-import';
import {resolvers} from './graphql/resolvers';
const server = express();
server.use(
'/graphql',
graphqlHTTP({
schema: buildSchema(importSchema('**/*.graphql')),
rootValue: resolvers,
}),
);
答案 2 :(得分:2)
schemas文件夹应包含带有.graphql或.gql文件的文件
const path = require('path');
const { loadFilesSync } = require('@graphql-tools/load-files');
const { mergeTypeDefs } = require('@graphql-tools/merge');
const typesArray = loadFilesSync(path.join(__dirname, './schemas'));
module.exports = mergeTypeDefs(typesArray, { all: true });
答案 3 :(得分:0)
我遇到了同样的问题,我相信在没有将babel / webpack引入服务器端管道的情况下实现所要求的唯一方法就是将查询写为导出的模板字符串。
e.g。
/* query.gql */
module.exports = `
schema {
query: Query
mutation: Mutation
}
type Query {
posts: [Post]
post(id:String, slug:String): Post
user(uid:String): User
}
...
`
值得庆幸的是,用于GraphQL的VS Code语法高亮显示器支持此方法。
答案 4 :(得分:0)
有一个相同的问题,如何以正确的方式实现它。无论如何,这对我有用。
import {gql} from 'apollo-server-express'
import * as types from './types.graphql'
export const typeDefs = gql`${types}`