首页 > 解决方案 > 动态提供一个模拟类会导致“装饰器不支持函数调用,但是......”在 prod 模式下出现错误

问题描述

我有一个 Angular 8(离子)项目。我想在哪里模拟一些本地提供者。我创建了这个类

import { AppVersion } from '@ionic-native/app-version/ngx';
import { Provider } from '@angular/core';
import { AppVersionMock } from './mocks/app-version.mock';

export class NativePluginsWithMocks {
  public static getProviders(): Provider[] {
    let providers;
    const isCordovaEnvirionment = (window as any)['cordova'];

    if (isCordovaEnvirionment) {
      // Use device providers
      providers = [AppVersion];
    } else {
      // Use browser providers
      providers = [{ provide: AppVersion, useClass: AppVersionMock }];
    }

    return providers;
  }
}

我在我的模块上提供它

import { NativePluginsWithMocks } from './native-plugins-with-mocks/native-plugins-with-mocks';

@NgModule({
  declarations: [],
  imports: [CommonModule],
  providers: [
    ...NativePluginsWithMocks.getProviders(),
    SplashScreen,
    StatusBar,
    ScreenOrientation,
    NativeToast,
    AdMobFree,
    SecureStorage,
    Device,
    Market,
    File,
    AndroidPermissions,
    InAppPurchase2,
    Network,
    NativeStorage,
    {
      provide: StorageService,
      useFactory: storageServiceFactory,
      deps: [Storage, NativeStorage, LoggerService, Platform]
    }
  ]
})
export class IonicNativePluginsModule {}

它在模式下工作,dev但在prod模式下编译器会发送错误:

ERROR in Error during template compile of 'IonicNativePluginsModule' [ng] 装饰器不支持函数调用,但调用了'NativePluginsWithMocks'。

有没有办法让它在生产模式下工作?我想我可以将它包装在工厂中,但这意味着我必须为每个模拟创建大量样板代码。我看错了什么?

标签: angularionic-framework

解决方案


推荐阅读