2016-12-27 133 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

也許它們不是最好的解決方案,但是避免每次都以不同的方式設置項目的技巧。