2017-10-18 31 views
1

我們在我們的角度應用程序中使用環境變量來讀取設置等,但有沒有一種方法來生成構建資產/文件?Angular 4爲每個環境創建資產/文件?

基本上我們想在資產文件夾中創建一個'auth/settings.js'文件,其中包含每個環境特有的客戶端ID和apiUrl。這些將在index.html中使用(因此在角度應用程序引導之外),例如

例如,這樣他們就可以index.html中讀入導出到一個js/JSON文件輸出到資產文件夾environment.ts值

export const environment = { 
production: false, 
title: 'default', 
clientId: 'xxxx-xxxx-xxxx-xxxx-xxxx', 
clientUrl: 'https://localhost:4200/app', 
apiUrl: 'https://localhost/api' 

}; 

我已閱讀,你可以使用mulitapps:

https://github.com/angular/angular-cli/wiki/stories-multiple-apps

這可能工作,但看起來像很多複製和粘貼,我們會有不少版本的構建 - 我不知道你是否可以一次聲明通用設置,只是擴展額外的應用程序設置(繼承)?

感謝

+0

的問題是對廣大相信,但無論如何有你看着這個https://github.com/AngularClass/angular-starter,用它我能夠做2個不同的項目,每個項目有4個不同的環境,單個代碼庫,所以使用webpack和我的版本閱讀JSON配置文件,我使用EVN變量提供。 –

+0

默認情況下,角度cli爲您提供可用的開發和生產環境文件。存儲這樣的信息。您也可以定義一個代理文件來幫助使用各種端點。您可以將代理文件作爲參數傳遞給ng服務。 –

+0

@JamesQuick看起來像你在談論https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md,但它不是重點,而且你沒有運行'ng serve在生產上。 – Kuncevic

回答

1

我們正在做我們的情況下,實際上是具有app/config文件夾中的config.jsonconfig.[env-name].json文件中project assets配置的內容。該config.json文件是使用瀏覽器Fetch API

在我們構建服務器基於環境的構建與config.staging.jsonconfig.prod.json我們只是更換的config.json內容的角度引導之前獲得牽強。我們還有AppSettings類在引導時創建。下面是它的樣子:

fetch(configUrl, { method: 'get' }) 
.then((response) => { 
    response.json() 
    .then((data: any) => { 
     if (environment.production) { 
     enableProdMode(); 
     }; 
     platformBrowserDynamic([{ provide: AppSettings, useValue: new AppSettings(data.config) }]).bootstrapModule(AppModule); 
    }); 
}); 

UPDATE: 如果你需要堅持到index.html根據您的ENV一些值,你可能需要考慮這樣做,你的構建服務器上。你可以寧願string replace的值,或者你可以有index.[env-name].thml文件,所以你只需根據環境構建覆蓋index.html

還檢查了這個問題
- https://github.com/angular/angular-cli/issues/7506
- https://github.com/angular/angular-cli/issues/3855

+1

嗨Kuncevic - 這是我們最終做的:) –

相關問題