我们计划将Angular部署到Amazon S3静态网站中,目前我们正在为每个环境(开发/生产)进行单独的构建。是构建一次并部署到所有环境的任何解决方案。
预先感谢。
,因为我理解您是否想拥有一个构建(例如,一个连续的集成构建)(例如,开发,开发,测试,生产等)。如果每个堆栈的环境文件中有不同的设置,则将具有不同的构建。您只有一个选择只有一个构建。
在开发环境文件中,您需要在本地开发的开发设置。在您的生产环境中,文件使用占位符的设置,这些设置与您的开发设置不同。
然后,您始终可以构建生产申请,并将您的申请与占位符的占位符。
对于部署,您必须操纵主。*。bundle.js文件(有占位符):
- preeploy:运行一个操纵主的脚本。生产设置。
- 部署:将应用程序部署到您的应用服务
- deploy:运行一个操纵主的脚本。
是的,这不是一个不错的解决方案,但是经过3天的研究,这是最好的选择。然后,您可以通过运行脚本部署多个堆栈的应用程序。
我在Visuals Studio Team Services上使用PowerShell脚本进行了此操作,以利用那里的发行功能将应用程序部署到Microsoft Azure。
刚刚完成了此问题的解决方案,用于在工作中的许多部门应用中使用。
基本思想(受" 12个因素应用程序"文档的"配置"部分的启发,是将配置存储在服务器上,与应用程序本身分开。
当您将应用程序部署到服务器时,它会从服务器中获取其配置,而不是将其捆绑到应用程序中。
这完全消除了需要重建针对不同环境/部署方案的应用程序。
这样做需要更改Angular应用程序消耗配置的方式。
使用将配置放在应用程序环境中的通常方法。TS文件,配置始终在运行时可用,并且可以在需要时注入。
使用服务器端配置,Angular应用程序需要进行HTTP调用以获取配置,因此无法立即使用。
我的方法是创建一个通过HTTP调用加载配置的ConfigurationsEvice。此服务通过RXJS asyncsubject发布配置。我将此服务注入需要配置的所有类。
asyncSubject仅在调用了oncomplete方法后才发出值,因此配置的消费者可以通过asyncsubject flatmap flatmap,然后使用结果配置来例如获取API调用的URL。
剩下的问题是如何初始化configurationservice ...假设所有api url都在配置中,configurationservice如何知道要使用什么URL来获得配置?
我对此的解决方案是安排与Angular Application index.html相同的基本URL可用配置文件(例如,如果index.html位于https://example.com/someapem/someape-/index上。html,然后配置文件位于https://example.com/someapp/config/ui-config.json)
这允许ConfigurationService相对引用配置URL。在上一个示例中,它将使用URL" config/ui-config.json"或" ./config/ui-config.json"。
用于不用后端服务的测试,我将配置文件存储在应用程序/资产/配置中,然后设置Angular的代理,以拦截从资产/配置文件夹返回的配置请求。
对于非DEV部署(QA,生产等),您需要安排与Angular App的index.html相同的位置提供配置文件。
如果您将角度应用程序与后端分开部署,这意味着简单地将配置文件放入与index.html文件的同一文件夹中。
用于与我的前端和后端捆绑在一起,就像我的基于Java的Springboot应用程序一样在预期的网址。
对于Springboot应用程序,我使用webmvcconfigureradapter来实现此操作,该WebMvcconFigurerAdapter添加了一个资源手用来制作"配置"目录(无论您选择在哪里存储它),并且它是可用的内容,就像它是"静态"文件一样,就像一个"静态"文件Angular应用程序的索引.html
配置外部化可以使用必须在根级别上创建的Env.js文件来完成。请关注link-https://www.jvandemo.com/how-to-use-environment-variobles-to-configure-your-angular-angular-angular-application-without-a-a-rebuild/
在连续交付系统中用于角度处理环境的配置库。查看我创建的NPM软件包处理此问题https://www.npmjs.com/package/@golavr/ng-config