我从事许多在 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
应设置为传统意义上的 development
或 production
。
原因是,当您构建前端应用程序(React 等)时,您可以在 development
模式或 production
模式下构建应用程序。例如,在 development
模式下,您将观察变化并持续构建。在生产模式下,您缩小代码并优化它的大小。
在 Node 服务器的情况下,NODE_ENV
指的是您启动应用程序的模式。例如,在 development
模式下,您配置服务器并安装所有 devDependencies
并观察更改并实时重新加载服务器。在 production
模式下,您只需安装 dependencies
并以优化的配置启动服务器。
现在谈到不同的生产环境,比如staging
、pre-live
、live
等,你应该使用一个单独的ENV变量这个。除了 local
之外,所有其他环境都被视为 production
环境,您的应用程序应该在这些环境中以 production
模式构建并启动。
您通常会为每个环境加载不同的配置,例如 api key 和 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",
}
您需要在每个环境中使用正确的启动脚本启动应用。
关于javascript - 在 JavaScript 项目中将 NODE_ENV 与多个环境一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42523175/