使用多种环境和多种口味构建有角度的应用程序

时间:2019-08-01 19:29:44

标签: angular firebase angular-cli firebase-hosting

我们有一个产品,其中包含一个Angular Web应用程序,该应用程序将Firebase与多个客户一起使用。每个客户都有其自己的Firebase实例(dev和prod)。 Firebase用于托管Web应用程序,并且该应用程序需要Firebase凭据才能访问Firestore,Auth和Cloud Storage。

我们想以一种方式设置angular.json,以便在部署到新客户端时,我们必须添加最小行数以选择正确的Firebase配置。

使用fileReplacements选项的多个环境并不难,但是我看不到如何在它们之间共享配置,因此我们不必在所有客户中都使用生产和开发特定的配置。 / p>

我认为我们可以构建一个自定义的CLI构建器来交换配置文件,但是对于如此简单的事情来说,这似乎是一项艰巨的任务。所有客户共享相同的代码库。

我在构建工具方面的经验有限,我希望我错过了一种简单的方法来实现此目的。

谢谢!

2 个答案:

答案 0 :(得分:1)

由于您使用的是Firebase Hosting,因此可以使用一个特殊的URL,该URL将为您提供项目的特定配置。 documentation中对此进行了描述。具体来说,第二个在SDK auto-configuration上。如果像这样的脚本那样从网页加载以下相对URL,则包括:

<script src="/__/firebase/init.js"></script>

它将为项目提供默认配置并初始化Firebase SDK。如果您不想使用脚本包含,也可以动态加载此脚本。

如果这样做,您还必须使用Firebase Hosting模拟器在本地测试您的网站,因为它将正确解释当前项目的特殊URL。

答案 1 :(得分:0)

由于2019年8月,angular-cli不支持多维环境。我结束了编写自己的简单节点脚本以进行服务和构建的过程。

该脚本将环境/{projectId}.ts复制到环境/environment.ts并启动ng build | serve。我删除了angular.json中的production:fileReplacements,所以--prod模式不会替换文件。

现在,当新的客户到达时,我只需要在具有Firebase凭证和其他自定义变量的环境中创建projectId。*。ts文件即可。

对于开发,我使用from os import path from glob import glob from scipy.ndimage import imread import numpy as np # Here i'm actually opening each image, and putting its pixel data in # numpy arrays images = [ imread(imgpath) for imgpath in glob(path.join('images', '*.png')) ] # 'images' doesn't need to be a numpy array, it can be a regular # python list (array). In fact, it can't be if the images are of # different sizes 和用于构建node build-cli.js serve customer-dev -o

build-cli.js

node build-cli.js build customer-prod --prod