我们正在开发一个使用 Firebase 作为其后端的 Ionic 混合应用程序。为此,我们使用 npm 包angularfire2。
我们有两个数据库,一个用于开发,另一个用于生产,因此我们希望根据应用程序的状态交换它们。
为此,我们创建了一个布尔静态常量 ( IS_PRODUCTION_ENVIRONMENT),根据它的值,它会发生变化FIREBASE_CONFIG,它是包含数据库配置数据的变量。
这是我们app.config.ts文件中的重要数据:
export class AppConfig {
public static readonly IS_PRODUCTION_ENVIRONMENT = false;
public static readonly FIREBASE_CONFIG_DEVELOPMENT = {
apiKey: "",
authDomain: "",
databaseURL: "",
projectId: "",
storageBucket: "",
messagingSenderId: ""
};
public static readonly FIREBASE_CONFIG_PRODUCTION = {
apiKey: "",
authDomain: "",
databaseURL: "",
projectId: "",
storageBucket: "",
messagingSenderId: ""
};
public static readonly FIREBASE_CONFIG = AppConfig.IS_PRODUCTION_ENVIRONMENT ?
AppConfig.FIREBASE_CONFIG_PRODUCTION : AppConfig.FIREBASE_CONFIG_DEVELOPMENT;
...
这是调用app.module.ts:
imports: [
...
AngularFireModule.initializeApp(AppConfig.FIREBASE_CONFIG),
...
]
知道了这一点,我们的问题是,当我们启动带有--prod --release标志的应用程序时,如果我们想构建它或者只是在某些设备上测试它;例如,使用 时ionic cordova run browser --prod --release,Firebase 始终使用生产配置 ( FIREBASE_CONFIG_PRODUCTION) 进行配置,就好像IS_PRODUCTION_ENVIRONMENT设置为一样true,但事实并非如此。
在不同的文件中插入console.logs,我们意识到,在生产模式下构建应用程序后,IS_PRODUCTION_ENVIRONMENT并FIREBASE_CONFIG显示正确的值。但是,Firebase 生产数据库仍然像IS_PRODUCTION_ENVIRONMENTwas一样配置true,尽管不是。
第一个配置错误的可跟踪日志来自 file firebase.app.module.js,来自angularfire2包的文件,其方法config中的变量initializeApp()接收的值FIREBASE_CONFIG_PRODUCTION(好像IS_PRODUCTION_ENVIRONMENT设置为true),即使FIREBASE_CONFIG指向FIREBASE_CONFIG_DEVELOPMENT.
如果我们FIREBASE_CONFIG直接指向生产或开发(没有三元条件运算符),则不会重现该问题,因此我们认为,出于某种原因,在类 100% 构建initializeApp()之前使用,并且一如既往地考虑。AppConfigIS_PRODUCTION_ENVIRONMENTtrue
此外,如果我们使用ionic serveor启动应用程序进行测试ionic run,该应用程序将正常运行,并使用所选配置启动 Firebase 数据库。--prod --release因此,该问题仅在使用标志构建时发生。
有谁知道解决这个问题的方法,或者另一种编码方法?
谢谢!