将 Apollo Server NODE_ENV 设置为“生产”模式实际上(内部)做了啥?

Posted

技术标签:

【中文标题】将 Apollo Server NODE_ENV 设置为“生产”模式实际上(内部)做了啥?【英文标题】:What does setting Apollo Server NODE_ENV to 'production' mode actually do (internally)?将 Apollo Server NODE_ENV 设置为“生产”模式实际上(内部)做了什么? 【发布时间】:2020-11-04 16:50:31 【问题描述】:

我们在一个大型项目中使用 Apollo 服务器作为“接口”服务器——也就是说,它需要各种 API 并使用“模式拼接”将它们全部转换为单个 GraphQL API。

目前我们的启动脚本是

"start": "tsc && NODE_ENV=development node dist/index.js"

我们把它改成了

"start": "tsc && NODE_ENV=production node dist/index.js"

当我们推送到生产环境时,当客户端尝试访问接口服务器时,我们开始收到 400 范围内的错误(我没有确切的错误,因为我们恢复了推送)。

我们在 /index.ts 文件中所做的唯一其他更改是服务器本身的配置

introspection: true,
        playground: !(process.env.NODE_ENV === 'production')

无论如何,如前所述,我们恢复到“开发”,一切正常。

NODE_ENV 设置为production 在内部有什么作用?

我查看了 Apollo Server 文档,但找不到任何东西。

我在Deploying With Heroku 下找到了这个(我们没有使用 Heroku 进行部署,但这是我能找到的唯一参考)

要启用 Apollo Server 的生产模式,您需要设置 NODE_ENV 变量到生产环境。

但是,“生产模式”究竟是什么?我很可能错过了解释这一点的明显文档。

【问题讨论】:

你有没有机会使用内省?因为根据文档,除了在 prod 模式下禁用的游乐场之外,另一件事是。 【参考方案1】:

你使用nodemon插件吗?并且nodemon config已经设置了ENV,如:"env": "NODE_ENV": "development"

其他,尝试使用cross-env设置NODE_ENV。

【讨论】:

以上是关于将 Apollo Server NODE_ENV 设置为“生产”模式实际上(内部)做了啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 cookie 从 apollo-server 传递到 apollo-clenet

Egg.js运行环境配置场景

Apollo-Server,如何与 SailsJS 一起使用?

Apollo-server 2 验证中间件

Apollo Server:将参数传递给嵌套解析器

如何将 Apollo Server 异步附加到 Lambda 处理程序?