我有一个在Node环境中运行的Angular应用程序,而且服务器正在使用express.js
。
这个项目必须部署在Heroku dyno上,所以在那个平台上,为了配置环境,我通过这样的Procfile
设置了正确的项目:
config_env: heroku config:set NODE_ENV=staging
这样做,我为所有环境设置了正确的环境。
现在,我想以某种方式将process.env.NODE_ENV
变量传递给Angular,以便它可以读取在Http请求期间必须调用的正确API链接。
我已经阅读了this article,它似乎是唯一一个拥有多个解决方案的最终解决方案,正如作者所说,它没有任何缺点(好吧,一个,但这很荒谬)。
对我来说(我在Angular中对Node不太熟悉)不清楚这个选项4是如何工作的,也许很多人现在正在使用它,所以也许有人可能比作者更清楚。
我特别不了解的是Angular如何理解它必须使用的环境。
我自己解释一下:在文章中,作者正在使用带有gulp-ng-config
的Gulp传递变量(我也使用Gulp,因此使用新任务更新它很容易)。所以,我将以下config.json
文件传递给此插件(类似于his example中的那个):
{
"development": {
"ENV_VARS": {
"apiUrl": "https://api-development.com/",
"debug": true
}
},
"testing": {
"ENV_VARS": {
"apiUrl": "https://api-testing.com/",
"debug": true
}
},
"staging": {
"ENV_VARS": {
"apiUrl": "https://api-staging.com/",
"debug": true
}
},
"production": {
"ENV_VARS": {
"apiUrl": "https://api-production.com/",
"debug": false
}
}
}
当然,我有以下常数:
angular.module("myApp")
.constant("development", {"ENV_VARS":{"apiUrl":"https://api-development.com/","debug":true}})
.constant("testing", {"ENV_VARS":{"apiUrl":"https://api-testing.com/","debug":true}})
.constant("staging", {"ENV_VARS":{"apiUrl":"https://api-staging.com/","debug":true}})
.constant("production", {"ENV_VARS":{"apiUrl":"https://api-production.com/","debug":false}});
现在问题仍然存在,因为Angular不知道哪个是正确的环境,然后是通过应用程序必须使用的正确常量......那么,这有什么优势呢?
是否有其他方法我可以在Angular应用程序中传递process.env.NODE_ENV
,以便在有http请求时可以使用$http.get({url: ENV_VARS.apiUrl + 'api/sessions'})
之类的内容?