我将Apollo Client与React配合使用,graphql-tag随Webpack一起加载,而graphql-config则用于在客户端上维护架构。
有一个文件./myclient/src/features/stats/graphql/getStart.graphql
query GetStart {
start @client
}
其中start
和@client
不使用IDE graphql插件进行验证,因为它们不包含在自动生成的架构中。
./myclient/.graphqlconfig
文件
{
"projects": {
"client": {
"schemaPath": "schema.graphql",
"extensions": {
"endpoints": {
"dev": "http://localhost:3000/graphql"
}
}
}
}
}
Webpack配置为使用以下方式在客户端上加载graphql模式
{
test: /\.(graphql|gql)$/,
exclude: /node_modules/,
use: 'graphql-tag/loader',
},
它将正确加载服务器模式。但是,如何配置它以验证或忽略引起start @client
和Unknown field "start" on object "Query"
错误的Unknown directive "@client"
?
答案 0 :(得分:2)
可以为Apollo客户端the docs定义客户端架构。我创建了一个文件./src/apollo/graphql/typeDefs.graphql
,其中包含类型定义。
directive @client on FIELD
type RestParams {
limit: Int
page: Int
}
extend type Query {
restParams: RestParams
}
我将typeDefs.graphql
导入到client.js
文件中,并将typeDefs
添加到ApolloClient
构造函数选项中。
import { ApolloClient } from 'apollo-client';
import { ApolloLink } from 'apollo-link';
import { InMemoryCache } from 'apollo-cache-inmemory';
import TYPE_DEFS from './graphql/typeDefs.graphql';
import createHttpLink from './links/httpLink';
import createErrorLink from './links/errorLink';
import createAuthLink from './links/authLink';
const errorLink = createErrorLink();
const httpLink = createHttpLink();
const authLink = createAuthLink();
const cache = new InMemoryCache({});
const client = new ApolloClient({
cache,
link: ApolloLink.from([
authLink,
errorLink,
httpLink,
]),
// resolves,
typeDefs: TYPE_DEFS,
connectToDevTools: true,
});
export default client;
IDE不能发现类型定义,但Apollo Chrome检查器插件也可以发现它们。