带有Node的.gql或.graphql文件类型

时间:2017-04-24 17:47:14

标签: node.js express graphql babel

我正在使用带有Node的Apollo graphql-server-express,我想将我的“typedef”架构定义文件转换为.graphql or .gql文件,以便清晰和语法高亮。

最好的方法是什么?我在Babel(?)之外找不到任何好的资源,这似乎是唯一的选择。

非常感谢你的帮助!

5 个答案:

答案 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}`