NODE_ENV变量用于管理开发环境与生产环境的互换。 当为开发环境时,可设置NODE_ENV=development ,当为生产环境时,可设置NODE_ENV=production . node_env与app.get('env')的关系: 可通过process.env.NODE_ENV 获取当前系统环境下的环境变量NODE_ENV 的值。
app.set('env') = process.env.NODE_ENV || 'development'
即 当设置了NODE_ENV 变量时,express 的env 的值为NODE_ENV 的值,当没有设置NODE_ENV 变量时,express 的env 默认为development 。
应用实践:(与pm2结合使用)
ecosytem.json文件配置类似如下:
{
"apps" : [
{
"name" : "myapp","script" : "./bin/www","watch" : true,"watch_options": {
"usePolling": true
},"env": {
"COMMON_VARIABLE": "true"
},"env_production" : {
"NODE_ENV": "production"
},"env_development": {
"NODE_ENV": "development"
}
}
],....
}
先说说env与env_的区别
env 为object 类型,用于设置你的应用中要用到的环境变量,如{“NODE_ENV”: “development”,“ID”: “42”}
env_* 也为object 类型,如{“NODE_ENV”: “production”,“ID”: “89”} ,但其只有在运行pm2 start ecosystem.json --env * 命令式时,其设置的环境变量才会被注入到当前应用中。这与env 不同,env 是在启动应用后被自动添加当向前应用中的,不需要运行 --env 参数。
对于env_* ,我们可以定义各种具体的环境变量,以便可轻松的进行各种环境下的切换,方便与开发与部署。如env_dev,env_productiong,env_strage.....
具体说来,按照我上边配置的ecosystem.json 文件,具体如下
"env": {
"COMMON_VARIABLE": "true"
},"env_production" : {
"NODE_ENV": "production"
},"env_development": {
"NODE_ENV": "development"
}
当运行pm2 start ecosystem.json 时,只有env 选项下的COMMON_VARIABLE 变量被添加到应用的环境变量里。
当运行pm2 start ecosystem.json --env production 时,env 选项下的COMMON_VARIABLE变量 和env_production 选项下的NODE_ENV 变量都被添加到应用的环境变量里了,此时NODE_ENV=production 。
当运行pm2 start ecosystem.json --env development 时,env 选项下的COMMON_VARIABLE 变量和env_development 选项下的NODE_ENV 变量都被添加到应用的环境变量里了,此时NODE_ENV=development 。
可看到就这么简单,只通过--env 参数,就方便的实现了不同工作环境的快速切换。
现在回到项目中,我们设置好了ecosystem.json ,无论是在本地开发环境还是服务器生产环境下,我们都可以用pm2 start ecosystem.json --env * 等命令进行环境模式的方便切换。当然从安全角度考虑,在生产环境下,一定要用--env production ,确保处于生产的安全环境下。
当不带--env 参数,即默认情况下不设置node_env 环境变量时,app.get('env')= 'development' ,此默认为开发模式。
当 --env production 时,设置了node_env=production ,此时app.get('env')= 'production ',此为生成模式。
当 --env development 时,设置了node_env=development ,此时app.get('env')= 'development ',此为开发模式。
另外,在本地开发环境下,可通过export NODE_ENV=production ,将其暂时切换到生产模式,可用于在本地调试线上情况。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|