当后端模式设置为node_env:development
时,所有工作都很正常,但在生产模式下,graphql-codegen失败,出现错误:
本地Web服务器错误:
Apollo服务器不允许GraphQL内省,但查询包含_schema或_type。若要启用内省,请将内省:true传递给生产中的ApolloServer
生产Web服务器错误:
无法从https://example.com/graphql加载架构,原因:无法验证第一个证书。GraphQL代码生成器支持:
前端codegen.yml:
schema: ${REACT_APP_GRAPHQL_URL}
documents:
- './src/GraphQL/queries/query.ts'
- './src/GraphQL/mutations/mutation.ts'
overwrite: true
generates:
./src/generated/graphql.tsx:
plugins:
- typescript
- typescript-operations
- typescript-react-apollo
config:
skipTypename: false
withHooks: true
withHOC: false
withComponent: false
前端DevDependencies:
{
"@graphql-codegen/cli": "^1.20.1",
"@graphql-codegen/typescript": "^1.20.2",
"@graphql-codegen/typescript-operations": "^1.17.14",
"@graphql-codegen/typescript-react-apollo": "^2.2.1",
}
npm脚本:
{
"generate": "graphql-codegen -r dotenv/config --watch --config codegen.yml",
"prebuild": "graphql-codegen -r dotenv/config --config codegen.yml"
}
./src/generated/directory添加到.gitignore
我的解决方案是添加内省插件并将codegen.yml文件分离到:
devDependencies: {"@graphql-codegen/introspection": "^1.18.1"}
codegen-generate-typescript.yml:
schema: graphql.schema.json
documents:
- './src/GraphQL/queries/query.ts'
- './src/GraphQL/mutations/mutation.ts'
overwrite: true
generates:
./src/generated/graphql.tsx:
plugins:
- typescript
- typescript-operations
- typescript-react-apollo
config:
skipTypename: false
withHooks: true
withHOC: false
withComponent: false
codegen-generate-schema-json.yml:
schema: ${REACT_APP_GRAPHQL_URL}
overwrite: true
generates:
./graphql.schema.json:
plugins:
- introspection
因此需要提交./graphql.schema.json文件并将其用作模式源而不是URI。
也许你会提出更好的解决方案?