2017-10-18 28 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 - 这是我们最终做的:) –

相关问题