在JavaScript项目中使用NODE_ENV和多个环境

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

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

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

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

我最近正在研究一个将生产环境称为“生活”的项目。

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

看起来Express和Node.js的其他一些库会locking您将要使用“production”或“development”作为NODE_ENV并且为您的环境使用其他名称可能会产生意想不到的效果。

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

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

我觉得,如果我要将代码部署到云上的开发环境或登台环境中,我认为他们不应该以与生产环境不同的快速“模式”运行。

维护与NODE_ENV分开的configuration更有意义吗?

例如 ,将您的configuration从APP_ENV之类的variables中NODE_ENV是否APP_ENV ,同时确保NODE_ENV对于像Express这样的frameworks/packages来说是“开发”或“生产”。

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

一个合理的例子是有一个local的configuration和production版本的configuration。 在这种情况下,我build议让NODE_ENV成为您为每个环境设置的参数之一。 例如,您可能需要为localstagingproduction三个不同的数据库,但是将NODE_ENV设置为在local进行development ,并为stagingproduction

由于variables将是shellvariables,因此在运行服务器之前,需要在目标操作系统上加载某些环境variables。 像https://www.npmjs.com/package/dotenv这样的模块看起来很有希望达到这个目的。