sea*_*n11 7 javascript environment-variables node.js express
我处理许多在Express服务器上运行的项目,无论它们是前端(即React.js)代码库还是服务器端Node.js codebases.
很多时候,codebases我会根据前端加载条件配置NODE_ENV,例如前端发出请求的restful API的URL.
我多次使用NODE_ENV有条件地加载服务器端Node.js项目的数据库配置等内容.
在一个由开发,登台和生产(3个环境)组成的项目中,我通常会设置我的代码,以根据NODE_ENV被设置为这3个环境中的任何一个(也可能是"本地")来加载配置.
我最近正在开发一个将生产环境称为"实时"的项目.
当我决定为这种环境设置NODE_ENV = live时,同事指出了这种方法的一个主要缺陷.
似乎Express和其他一些Node.js库可以解决这样一个问题:你将使用"生产"或"开发",因为你NODE_ENV的环境使用其他名称会产生意想不到的影响.
例如,Express需要NODE_ENV=production以"生产"模式运行.根据Express文档"测试表明,这样做可以将应用程序性能提高三倍!"
基本上,我很好奇是否通常将NODE_ENV"开发"和"生产"之类的值设置为"我的项目".
我觉得,如果我要将我的代码部署到云上的开发或登台环境,我认为它们不应该以与生产环境不同的Express"模式"运行.
保持配置分开是否更有意义NODE_ENV?
例如,基于类似的变量来构建配置是否有意义APP_ENV,同时确保类似Express的NODE_ENV"开发"或"生产" frameworks/packages.
Din*_*yan 12
NODE_ENV应设置为传统意义上的任一development或production。
原因是,当您构建前端应用程序(React 等)时,您要么以development模式构建应用程序,要么以模式构建应用程序production。例如,在development模式中,您将观察变化并持续构建。在生产模式下,您可以缩小代码并优化其大小。
在节点服务器的情况下,NODE_ENV指的是您启动应用程序的模式。例如,在development模式下,您配置服务器并安装所有devDependencies并监视更改并实时重新加载服务器。在production模式下,您只需安装dependencies和启动优化配置的服务器。
现在谈论不同的生产环境,比如staging,pre-live,live,等,你应该使用一个单独的ENV变量这一点。除了local,所有其他环境都被视为production环境,您的应用程序应该production在这些环境中构建并以模式启动。
您通常会加载不同的配置,比如每个环境的 api 密钥、url。这些应该用一个单独的 ENV 变量来区分,比如APP_ENV.
我通常APP_ENV用来区分staging和live环境。
这是package.json不同环境下不同启动脚本的样子
"scripts": {
"start:local": "NODE_ENV=development APP_ENV=local your-start-script",
"start:staging": "NODE_ENV=production APP_ENV=staging your-start-script",
"start:live": "NODE_ENV=production APP_ENV=live your-start-script",
}
Run Code Online (Sandbox Code Playgroud)
您需要在每个环境中使用正确的启动脚本启动应用程序。
NODE_ENV用于区分开发和生产实例.没有运行生产代码不是一个好主意NODE_ENV=production.NODE_ENV=development通常不那么重要,因为图书馆通常只是检查是否NODE_ENV !== 'production'.因此,如果您希望拥有多个生产节点环境或类似生产环境,则应设置每个环境NODE_ENV=production.也就是说,您可以将其他环境变量设置为您想要的任何值,并在运行时从节点读取它们.
一个合理的例子是拥有配置的版本local staging和production版本.在这种情况下,我建议NODE_ENV您只为每个环境设置一个参数.例如,您可能要三个不同的数据库,为每个local,staging并production而是设置NODE_ENV于development上local,和production两个staging和production.
由于变量将是shell变量,因此在运行服务器之前,您需要一种在目标操作系统上加载某些环境变量的方法.像https://www.npmjs.com/package/dotenv这样的模块看起来很有希望.
| 归档时间: |
|
| 查看次数: |
6737 次 |
| 最近记录: |