我们正在开发一个使用 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.log
s,我们意识到,在生产模式下构建应用程序后,IS_PRODUCTION_ENVIRONMENT
并FIREBASE_CONFIG
显示正确的值。但是,Firebase 生产数据库仍然像IS_PRODUCTION_ENVIRONMENT
was一样配置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()
之前使用,并且一如既往地考虑。AppConfig
IS_PRODUCTION_ENVIRONMENT
true
此外,如果我们使用ionic serve
or启动应用程序进行测试ionic run
,该应用程序将正常运行,并使用所选配置启动 Firebase 数据库。--prod --release
因此,该问题仅在使用标志构建时发生。
有谁知道解决这个问题的方法,或者另一种编码方法?
谢谢!