在生产中禁用 graphiql
Posted
技术标签:
【中文标题】在生产中禁用 graphiql【英文标题】:disable graphiql on production 【发布时间】:2017-12-29 02:41:36 【问题描述】:如何在生产环境中禁用 graphiql,但在开发环境中仍然可以访问它?
使用 express-graphql 我们可以做类似的事情
app.use('/graphql', graphqlHTTP(
schema: MySessionAwareGraphQLSchema,
graphiql: process.env.NODE_ENV === 'development',
));
使用 apollo 服务器,我的设置是
import graphqlExpress, graphiqlExpress from 'graphql-server-express'
const app = new Express()
app
.all('/graphql', bodyParser.json())
.all('/graphql', graphqlExpress(
schema
)
.all('/graphiql', graphiqlExpress(
endpointURL: 'http://localhost/graphql'
)
)
我找不到传递给 NODE_ENV 以启用/禁用 graphiql 的方法。
【问题讨论】:
【参考方案1】:这是我在 koa 设置中的内容
export default () => (
convert(graphqlHTTP((req, res, ctx) => (
schema: require('app/graphql/schema'),
context:
...ctx.app.context,
...ctx.state,
,
// Enable graphql for development environments only
graphiql: config.environment === 'development',
formatError: error => (
message: error.message,
stack: error.stack,
locations: error.locations,
),
)))
)
注意graphiql: config.environment === 'development',
从这里您可以传递自定义环境变量并使用它启动您的应用程序。
ENABLE_GRAPHIQL=true NODE_ENV=production npm start_my_server
根据您管理环境变量的方式,您可以将表达式更改为
graphiql: myEnv.ENABLE_GRAPHIQL || myEnv.environment === 'development',
FWIW 你不应该在生产中启用 graphiql
【讨论】:
【参考方案2】:您的意思是仅在开发时启用 graphiql 并在生产时禁用它。如果是这样,只需排除 /graphiql 处理程序
if (process.env.NODE_ENV === 'development')
app.all(
'/graphiql',
graphiqlExpress(
endpointURL: '/graphql',
),
);
【讨论】:
嘿,这看起来是一种方式。我以为我们可以设置一个布尔值来禁用或启用它。以上是关于在生产中禁用 graphiql的主要内容,如果未能解决你的问题,请参考以下文章
Tailwind CSS Nuxt 禁用清除选项在生产中引发错误
您应该使用 Babel 配置中的 `env` 部分在生产中禁用 react-transform-hmr