javascript - 在 JavaScript 项目中将 NODE_ENV 与多个环境一起使用

标签 javascript node.js express environment-variables

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

很多时候使用前端codebases我会加载基于NODE_ENV的条件配置,例如前端请求的restful API的URL .

我也多次使用 NODE_ENV 有条件地加载诸如服务器端 Node.js 项目的数据库配置之类的东西。

在一个由开发、暂存和生产(3 个环境)组成的项目中,我通常会设置我的代码以根据设置为这 3 个环境中的任何一个的 NODE_ENV 加载配置(也许还有“本地”)。

我最近在做一个将生产环境称为“实时”的项目。

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

似乎 Express 和其他一些 Node.js 库捕获了这样一个事实,即您将使用“生产”或“开发”作为您的 NODE_ENV 并为您的环境使用其他名称可以有意想不到的效果。

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

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

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

维护与 NODE_ENV 分开的配置是否更有意义?

例如,将您的配置基于像 APP_ENV 这样的变量是否有意义,同时确保 NODE_ENV 是“开发” "或 "production"for frameworks/packages like Express.

最佳答案

NODE_ENV 应设置为传统意义上的 developmentproduction

原因是,当您构建前端应用程序(React 等)时,您可以在 development 模式或 production 模式下构建应用程序。例如,在 development 模式下,您将观察变化并持续构建。在生产模式下,您缩小代码并优化它的大小。

在 Node 服务器的情况下,NODE_ENV 指的是您启动应用程序的模式。例如,在 development 模式下,您配置服务器并安装所有 devDependencies 并观察更改并实时重新加载服务器。在 production 模式下,您只需安装 dependencies 并以优化的配置启动服务器。

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

您通常会为每个环境加载不同的配置,例如 api key 和 url。这些应该用单独的 ENV 变量区分,例如 APP_ENV

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

这就是 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",
}

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

关于javascript - 在 JavaScript 项目中将 NODE_ENV 与多个环境一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42523175/

相关文章:

javascript - 如何将数据从 express.js 传递到与 html 页面相关的 Javascript 代码

javascript - NPM、Supervisor 和 Nohup 在 shell session 之间退出

javascript - 无法从expressJS中的HTML表单获取数组

javascript - 简单的 jQuery 句柄处理

javascript - 如何一键更改一个表数据标签的值

javascript - 如何创建一个 json 对象并附加到 node.js 中的实际响应中

postgresql - 连接 Vue.js 前端 -> 通过 Express、Node.js、Sequelize (API) 端点。 (PostgreSQL)

javascript - 在 Express 中接收 Jquery POST 数据

javascript - id 在 onChange 事件中未定义

javascript - 从 input.files 获取文件而不是提交时的值