2016-12-27 131 views
1

我已经使用Angular 2 CLI构建了我的Angular 2项目,并能够使用此tutorial将应用程序部署到Heroku。Heroku管道与Angular 2环境

现在,我想为应用程序的不同环境(dev,staging,production等)创建一个管道。

在我的package.json中,我有"postinstall": "ng build -prod",它创建了我的代码的生产版本,这是我的应用程序运行的。有没有一种方法可以根据CONFIG_VARS更改-prod,这在我的Heroku设置中会有?例如,对于开发环境来说,它会说"postinstall": "ng build -dev",或者对于分段环境来说"postinstall": "ng build -staging"。或者我需要设置不同的项目?

回答

3

简短的回答是:不,你需要做一些不同的事情。

说明: npm postinstall脚本在构建Heroku slug时运行,当您执行git push到管道中的第一个Heroku应用程序时。随后,当您通过Heroku管道(例如从“开发”到“升级”到“制作”)“推广”发布时,预建的Heroku slu is将按原样提升,并且不会重建。

因此,假设您的“开发”应用程序中设置了一个配置变量,它将设置您传递给“ng build”到“dev”的参数。这意味着当你将git推送到你的“开发”应用程序时,会使用“开发”选项构建slug。这对于“开发”应用程序来说很好。然而,当你随后提倡“升级”和“生产”时,你将会推广使用“开发”选项构建的预制嵌块,这不是你想要的。

因此,要获得您想要的功能,您需要考虑采用不同的方法。

一种方法是在“npm prestart”阶段运行“ng build”脚本。这应该有效,并且使您能够使用Heroku config vars来修改您的Angular2应用,具体取决于它们所部署的Heroku流水线阶段。但是,我通常不会推荐这种方法。这会导致每次运行“npm start”时都会运行“ng build”,这在Heroku上很常见(即至少每24小时一次,加上每次Heroku dynos无论何种原因重新启动时)。这会导致您的应用程序在每次重新启动dynos时所经历的停机时间超过必要的时间。通常不是一个好主意。

相反,更好的选择可能是让您的Angular2应用程序在初始化时查询您的服务器,并根据常规的Heroku配置变量让服务器返回Angular2应用程序需要的任何管道阶段特定值。

+0

谢谢你的回答。所以为了确保我理解正确,我将无法利用Angular CLI为我设定的环境。 – Dauzy

+0

不像你在你的问题中建议的那样,没有。 –

+0

嗨@YoniRabinovitch我面临同样的问题,并问[关于实施服务器[问题](https://stackoverflow.com/questions/46824209/firebase-angular-4-initialize-based-on-node-environment)在Angular 4中查询环境,请你帮忙 – ishaqbhojani

0

如果您在Heroku的节点环境中运行的应用程序,你可以尝试看看这个解决方案,以避免你的环境变量和库硬编码的安全密钥:https://medium.com/@natchiketa/angular-cli-and-os-environment-variables-4cfa3b849659

我强烈建议也采取看看它的第一个响应,它介绍了动态解决方案在建设时创建环境文件:https://medium.com/@h_martos/amazing-job-sara-you-save-me-a-lot-of-time-thank-you-8703b628e3eb

也许它们不是最好的解决方案,但是避免每次都以不同的方式设置项目的技巧。