首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NODE_ENV项目中使用多环境的JavaScript

在NODE_ENV项目中使用多环境的JavaScript
EN

Stack Overflow用户
提问于 2017-03-01 04:25:21
回答 3查看 19.7K关注 0票数 14

我从事许多运行在Express服务器上的项目,无论它们是前端(即React.js)代码库还是服务器端Node.js codebases

很多时候,使用前端codebases,我都会加载基于NODE_ENV的条件配置,比如前端发出请求的restful的URL。

我还多次使用NODE_ENV为服务器端Node.js项目有条件地加载诸如DB配置之类的内容。

在一个由开发、分期和生产(3个环境)组成的项目上,我通常会根据被设置为这3种环境中任何一种的NODE_ENV (也可能是“本地”)来设置我的代码来加载配置。

我最近在做一个项目,把生产环境称为“现场”。

当我决定为这个环境设置NODE_ENV=live时,一位同事指出了这种方法的一个主要缺陷。

看来,Express和其他一些用于Node.js的库锁定到这样一个事实:您将使用“生产”或“开发”作为您的NODE_ENV,并为您的环境使用其他名称,这可能会产生意想不到的效果。

例如,需要NODE_ENV=production才能在“生产”模式下运行。根据Express文档,“测试表明,仅仅这样做可以提高应用程序的性能三倍!”

基本上,我很好奇是否像我在我的项目中所做的那样,将NODE_ENV设置为“开发”和“生产”以外的值是否被认为是常见的做法。

我觉得如果我要将代码部署到云上的开发或暂存环境中,我认为它们不应该运行在与生产环境不同的Express“模式”中。

维护独立于NODE_ENV的配置是否更有意义?

例如,,将您的配置建立在APP_ENV这样的变量的基础上是否有意义,同时确保NODE_ENVframeworks/packages的“开发”或“生产”,比如Express。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-01 04:27:54

NODE_ENV用于区分开发和生产实例。在没有NODE_ENV=production的情况下运行生产代码并不是个好主意。NODE_ENV=development通常不那么重要,因为库通常只检查是否是NODE_ENV !== 'production'。因此,如果您想拥有多个生产节点环境或类似于生产的环境,那么每个环境都应该设置NODE_ENV=production。也就是说,您肯定可以将其他环境变量设置为您想要的任何值,并在运行时从节点读取它们。

一个合理的例子是配置的localstagingproduction版本。在这种情况下,我建议将NODE_ENV作为为每个环境设置的参数之一。例如,您可能需要为每个localstagingproduction设置三个不同的数据库,但将NODE_ENV设置为development on local,将production设置为stagingproduction

由于变量将是shell变量,因此在运行服务器之前,需要在目标操作系统上加载某些环境变量。像https://www.npmjs.com/package/dotenv这样的模块在这方面看起来很有前途。

票数 15
EN

Stack Overflow用户

发布于 2018-11-19 03:50:37

在传统意义上,NODE_ENV应该设置为developmentproduction

原因是,当您构建前端应用程序(React等)时,您要么以development模式构建应用程序,要么以production模式构建应用程序。例如,在development模式下,您将监视更改并持续构建。在生产模式中,您可以缩小代码并优化代码的大小。

在节点服务器的情况下,NODE_ENV引用您以何种模式启动应用程序。例如,在development模式下,配置服务器并安装所有devDependencies并监视更改并实时重新加载服务器。在production模式下,您只需安装dependencies并以优化的配置启动服务器。

现在讨论不同的生产环境,比如stagingpre-livelive等等,您应该为此使用一个单独的ENV变量。除了local之外,所有其他环境都被认为是production环境,您的应用程序应该在这些环境中以production模式构建并启动。

您通常为每个环境加载不同的配置,比如api键、urls。应该用一个单独的ENV变量来区分这些变量,比如APP_ENV

我通常使用APP_ENV来区分staginglive环境。

这就是package.json在不同环境中使用不同的启动脚本时的样子。

代码语言:javascript
复制
"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",
}

您需要在每个环境中使用正确的启动脚本启动应用程序。

票数 19
EN

Stack Overflow用户

发布于 2018-11-19 03:31:25

当您安装NODE_ENV模块:npm install custom-env全文文档时,您可以在多个环境中使用https://www.npmjs.com/package/custom-env

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42523175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档