Angular 如何在索引文件中按网站域提供来自不同云服务桶的资产

Angular 如何在索引文件中按网站域提供来自不同云服务桶的资产,angular,assets,cdn,Angular,Assets,Cdn,由于政治原因,我们的目标是从两个云服务桶(AWS)和(阿里云)中提供图像和字体资产 中国客户不希望在AWS中查看来自美国服务的图像/字体,因此我们需要从ALIYUN为他们提供服务 因此,angular网站将在域名不在中国时提供AWS的资产服务,在域名在中国时提供Aliyun的资产服务 到目前为止,我的策略涉及在全局scss文件中使用域基变量。此变量将在SCSS文件中的所有资源url前面加上前缀 所以它看起来像: domain.scss文件 $domain资产: 此scss文件将在项目构建过程中被

由于政治原因,我们的目标是从两个云服务桶(AWS)和(阿里云)中提供图像和字体资产

中国客户不希望在AWS中查看来自美国服务的图像/字体,因此我们需要从ALIYUN为他们提供服务

因此,angular网站将在域名不在中国时提供AWS的资产服务,在域名在中国时提供Aliyun的资产服务

到目前为止,我的策略涉及在全局scss文件中使用域基变量。此变量将在SCSS文件中的所有资源url前面加上前缀 所以它看起来像:

domain.scss文件

$domain资产:

此scss文件将在项目构建过程中被覆盖(使用节点的writefile),因此如果我们改为切换到中国,该文件现在将具有 建造完成后,应遵守以下规定:

domain.scss文件

$domain资产:

这适用于scss文件中的资产,但是当在index.html中声明favicon和预渲染字体等资产时,上下文就失效了 的scss文件。我是否也可以在它们上设置基本域

我查看了angular.json配置,“deploy url”属性与我想要的最接近,只是url的前缀是绝对的
索引文件中的所有资产(包括css和js文件),但不是那些将生活在云中的文件,只有字体和字体。

到目前为止,我想到的是使用read/write node.js fs编辑具有正确桶基url的文件,基于一个命令行参数,我们创建了“cloud”,在angular build命令中将其设置为aws或alibaba。 -用于索引文件中的资产。我在JSDOM的帮助下修改了文件(它执行DOM操作),找到所有带有单词“assets”的链接(使用jsdomqueryselector),并相应地为url加上前缀。 -对于scss文件中的图像,我读/写了一个全局scss样式表,其中包含保存url域的变量

这可以很好地工作,直到两个bucket都乘以5以适应不同的环境,例如开发、质量、阶段等。。。如果在url中设置环境是在构建时进行的,则会出现问题,因为现在无论是谁构建项目,都必须意识到它将要使用哪个环境。如果我们错误地构建开发映像并部署在质量上,这将是一个意外事件

接下来要尝试的是至少将样式表部署到bucket中,这样所有图像都可以依赖于相对路径,而不需要确定需要哪个bucket url。到目前为止,我不确定这将如何实施