装饰器不支持函数调用,但调用了“AngularFireModule”

Posted

技术标签:

【中文标题】装饰器不支持函数调用,但调用了“AngularFireModule”【英文标题】:Function calls are not supported in decorators but 'AngularFireModule' was called 【发布时间】:2018-06-30 13:00:38 【问题描述】:

我使用 Firebase 作为 Angular 5 应用程序的数据库。我能够使用 ng build 构建、运行和部署项目。但是,当我使用 --prod 标志构建时,出现以下错误。

使用:

ng build --prod

我收到以下错误:

“FirebaseModule”函数模板编译期间出现错误 装饰器不支持调用,但“AngularFireModule”是 调用。

我不明白如何配置 AngularFire 模块以使其正常工作。

Firebase.Module.ts:

import  NgModule  from "@angular/core";
import  CommonModule  from "@angular/common";
import  environment  from "../environments/environment";       // Firebase config stored in environment file

import  AngularFireAuthModule  from "angularfire2/auth";
import  AngularFireModule  from "angularfire2/angularfire2";
import  AngularFirestoreModule  from "angularfire2/firestore";

@NgModule(
  imports: [
    AngularFireModule.initializeApp(environment.firebase),  // Error is here
    AngularFireAuthModule,
    AngularFirestoreModule
  ],
  exports: [AngularFireModule, AngularFireAuthModule, AngularFirestoreModule],
  providers: [],
  declarations: []
)
export class FirebaseModule 

environment.ts(和 environment.prod.ts)

export const environment = 
     production: false,
     firebase: 
       apiKey: "...",
       authDomain: "...",
       databaseURL: "...",
       projectId: "...",
       storageBucket: "",
       messagingSenderId: "..."
     
;

软件包版本

"angularfire2": "^5.0.0-rc.4",
"firebase": "^4.8.1",

AskFirebase

【问题讨论】:

您解决了这个问题吗?我今天在使用 Ionic 3 和 Angular 5 时遇到了同样的问题。 【参考方案1】:

ng build --prod 时我遇到了同样的错误,我必须通过更改 AngularFireModule 导入行来解决它

import AngularFireModule from "angularfire2/angularfire2";

import AngularFireModule from "angularfire2";

【讨论】:

谢谢,如果它对我有用,我会尝试并标记为解决方案!感谢您的帮助! 这并不能解决问题,它仍然是同样的问题【参考方案2】:

我在 Angular 6 中遇到了同样的问题。看起来这是 ng-packagr 的错误。问题报告中的注释表明直接执行ngc时不会出现问题。

https://github.com/dherges/ng-packagr/issues/767

【讨论】:

我能够在安装 @angularfire2@5.0.0-rc.9 后初始化 AngularFireModule,但它需要更改 AngularFireModule 的初始化方式。我删除了对静态方法 initializeApp 的调用并添加了一个提供程序... provide: FirebaseOptionsToken, useValue: firebaseOptions。 firebaseOptions 是传递给 initializeApp 的对象,FirebaseOptionsToken 可从 angularfire2 模块获得。 嘿@scott_Anderson 我认为直接执行时问题不会得到解决。可能发生的情况是您安装了两个版本的ng。在“直接”构建时使用全局,而 npm 将使用本地 (node_modules) 之一。您能否验证两个版本,以检查版本更改是否解决了这个问题? TY【参考方案3】:

更改构建脚本

来自

ng build --prod

ng build --prod --base-href=./ -aot=false

添加-aot=false 解决,但我认为这不是最好的解决方案。它应该将错误报告给 angularfire2 开发团队。

【讨论】:

【参考方案4】:

我也遇到了这个错误。 angularfire2 团队已经在 rc9 中修复了这个问题,现在它工作得很好。 只需使用此命令更新库

npm install @angularfire2@5.0.0-rc.9

希望这会有所帮助。

【讨论】:

你能提供更多细节吗? 它现在可以工作了,你提到的版本都是正确的,只需要关闭我的可视化代码并打开它,然后它就可以开始工作了。非常感谢

以上是关于装饰器不支持函数调用,但调用了“AngularFireModule”的主要内容,如果未能解决你的问题,请参考以下文章

python之“装饰器”

装饰器

类装饰器不绑定自我

使用 createReducer 函数时为生产构建 angular+ngrx 8 时出错

将命令行参数传递给调用带有装饰器参数的装饰函数的函数

python基础09--闭包,装饰器