当我处于开发模式时,我不希望我的服务器发送电子邮件和其他一些内容,所以我在server.js文件中有这个:
process.env.NODE_ENV = 'development';
当我将其移至制作时,我将值更改为' production'。
问题当然是在部署上很容易忘记。有可能以某种方式检测服务器何时投入生产?
如果不是,是否可以编写替换文件中字符串的批处理脚本?
答案 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}}将由您关注的应用中的任何模块正确设置。