节点JS,检测生产环境

时间:2015-01-23 13:47:46

标签: node.js batch-file

当我处于开发模式时,我不希望我的服务器发送电子邮件和其他一些内容,所以我在server.js文件中有这个:

process.env.NODE_ENV = 'development';

当我将其移至制作时,我将值更改为' production'。

问题当然是在部署上很容易忘记。有可能以某种方式检测服务器何时投入生产?

如果不是,是否可以编写替换文件中字符串的批处理脚本?

3 个答案:

答案 0 :(得分:2)

解决这类问题的建议方法是使用nodejs提供的process全局对象,即

var env = process.env.NODE_ENV || "development";

通过上述行。我们可以轻松地在开发/生产环境之间切换。如果我们没有配置任何环境变量,它适用于开发环境。

process.env是包含用户环境的对象。

例如,如果我们在bash shell中运行我们的应用程序并将NODE_ENV配置为produciton。然后我可以在节点应用程序中访问process.env.NODE_ENV

有多种方法可以为nodejs应用程序定义此NODE_ENV变量:

## Setting environment variable for bash shell
export NODE_ENV=prodction

## Defined while starting the application
NODE_ENV=production node app.js

所以我认为你不需要任何批处理文件。处理多个配置变量遵循此http://goo.gl/qmLxtq

答案 1 :(得分:2)

您不应该手动更改process.env对象的值,因为此对象反映了您的执行环境。

在您的代码中,您应该执行以下操作:

const environment = process.env.NODE_ENV || 'development';

然后你就像这样在生产中启动你的应用程序:

$ NODE_ENV=production node app.js

如果未设置NODE_ENV环境变量,则默认情况下它将设置为development

您还可以在开发中使用dotenv module来指定文件中的所有环境变量。

此外,我实现了一个可重用的模块,它允许通过分析CLI参数和NODE_ENV变量来自动检测环境。这在您的开发机器上非常有用,因为您可以通过将CLI参数传递给Node.js程序来轻松更改环境,如下所示:$ node app.js --prod。与Gulp一起使用也很好:$ gulp build --prod

请在detect-environment's page上查看更多详情和用例。

答案 2 :(得分:0)

这通常通过配置文件(例如node-convict之类的配置框架)和环境变量来处理。在生产中的启动命令中,您可能会执行以下操作:

NODE_ENV=production npm start

然后{/ 1}}将由您关注的应用中的任何模块正确设置。