在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
成为您为每个环境设置的参数之一。 例如,您可能需要为local
, staging
和production
三个不同的数据库,但是将NODE_ENV
设置为在local
进行development
,并为staging
和production
。
由于variables将是shellvariables,因此在运行服务器之前,需要在目标操作系统上加载某些环境variables。 像https://www.npmjs.com/package/dotenv这样的模块看起来很有希望达到这个目的。