我已经使用Angular 2 CLI构建了Angular 2项目,并能够使用本教程将应用程序部署到Heroku 。
现在,我想为应用程序的不同环境(开发,登台,生产等)创建管道。
在我的package.json中"postinstall": "ng build -prod",它将创建我的代码的生产版本,我的应用程序将在此版本上运行。有没有一种方法可以-prod根据CONFIG_VARS我在Heroku设置中的设置进行更改?例如,它将"postinstall": "ng build -dev"针对开发环境或"postinstall": "ng build -staging"登台环境。还是我需要以其他方式设置项目?
"postinstall": "ng build -prod"
-prod
CONFIG_VARS
"postinstall": "ng build -dev"
"postinstall": "ng build -staging"
简短的答案是:不,您需要做一些不同的事情。
说明:npm postinstall脚本在构建Heroku插件时,在git push到管道中的第一个Heroku应用程序时运行。随后,当您通过Heroku管道“促进”发布(例如,从“开发”到“登台”再到“生产”)时,预构建的Heroku弹头将“按原样”升级,而不进行重建。
因此,假设您在“开发”应用程序中设置了一个配置变量,该变量会将传递给“ ng build”的参数设置为“ dev”。这意味着当您git push到您的“开发”应用程序时,将使用“ dev”选项构建该插件。这对于“开发”应用程序来说很好。但是,当您随后升级到“暂存”和“生产”时,您将推广使用“ dev”选项构建的预构建块,这不是您想要的。
因此,要获得所需的功能,您将需要考虑另一种方法。
一种方法是在“ npm prestart”阶段运行“ ng build”脚本。这应该可行,并且使您能够使用Heroku配置变量来修改Angular2应用程序,具体取决于部署它们的Heroku管道阶段。但是,我通常不推荐这种方法。这将导致您的“ ng build”在每次“ npm start”运行时都运行,这在Heroku上经常发生(即,至少每24小时左右运行一次,再加上无论什么原因每次您的Heroku测功机重新启动)。这将使您的应用每次经历Dynos重新启动时比需要的停机时间更长。通常,这不是一个好主意。
相反,更好的选择可能是让Angular2应用在初始化时查询服务器,并让服务器根据常规的Heroku配置变量返回Angular2应用所需的任何管道阶段特定值。