【问题标题】:Angular Firebase: issue with importsAngular Firebase:导入问题
【发布时间】:2018-08-18 01:32:13
【问题描述】:

我创建了一个服务文件来管理我的 firebase 用户身份验证。但是,我在 auth.service.ts 文件中找到了导入错误。以下是导入后的错误和 ts 文件中的代码。

错误:

src/app/core/auth.service.ts(2,10) 中的错误:错误 TS2305:模块“C:/Users/Zakariah Siyaji/Desktop/or-api/node_modules/angularfire2/index”有没有导出的成员 'AngularFireAuth'。 src/app/core/auth.service.ts(2,27): error TS2305: Module '"C:/Users/Zakariah Siyaji/Desktop/or-api/node_modules/angularfire2/index"' 没有导出成员 'AngularFireDatabase '。 src/app/core/auth.service.ts(2,48): error TS2305: Module '"C:/Users/Zakariah Siyaji/Desktop/or-api/node_modules/angularfire2/index"' 没有导出成员 'FirebaseAuthState '。 src/app/core/auth.service.ts(2,67): error TS2305: Module '"C:/Users/Zakariah Siyaji/Desktop/or-api/node_modules/angularfire2/index"' 没有导出成员 'AuthProviders '。 src/app/core/auth.service.ts(2,82): error TS2305: Module '"C:/Users/Zakariah Siyaji/Desktop/or-api/node_modules/angularfire2/index"' 没有导出成员 'AuthMethods '。 src/app/core/auth.service.ts(2,95): error TS2305: Module '"C:/Users/Zakariah Siyaji/Desktop/or-api/node_modules/angularfire2/index"' 没有导出成员 'AngularFire '。

i 「wdm」:编译失败。

进口:

从“angularfire2”导入{ AngularFireAuth, AngularFireDatabase, FirebaseAuthState, AuthProviders, AuthMethods, AngularFire };

angularfire2 也在 package.json 文件夹中,版本号为:“^5.0.0-rc.11”

代码:

import { Injectable } from '@angular/core';
import { AngularFireAuth, AngularFireDatabase, FirebaseAuthState, AuthProviders, AuthMethods, AngularFire } from "angularfire2";
import { Router } from "@angular/router";

@Injectable({
  providedIn: 'root'
})


export class AuthService {
  authState: FirebaseAuthState = null;

  constructor(private af: AngularFire, private db: AngularFireDatabase, private router: Router) {
    af.auth.subscribe((auth) => {
      this.authState = auth;
    });
  }


  //Return true if user is logged in
  get authenticated(): boolean {
  return this.authState !== null;
}
  //Returns current user
  get currentUser(): any {
  return this.authenticated ? this.authState.auth : null;
}

 //Returns current user UID
 get currentUserId(): string {
 return this.authenticated ? this.authState.uid : '';
}

// Anonymous User
get currentUserAnonymous(): boolean {
return this.authenticated ? this.authState.Anonymous : false
}

//Returns current user display name or guest
get currentUserDisplayName(): string {

if (!this.authenticated) { return 'GUEST' }
else if (this.currentUserAnonymous) { return 'ANONYMOUS'}
else { return this.authState.auth.displayName || 'OAUTH USER'}

}

//login through a Gmail account
googleLogin(): Promise<FirebaseAuthState> {
return this.socialSignIn(AuthProviders.Google);
}

private socialSignIn(provider: number): Promise<FirebaseAuthState> {
  return this.af.auth.login({provider, method: AuthMethods.popup})
  .then(() => this.updateUserData() )
  .catch(error => console.log(error));
}

private updateUserData(): void {
  //Writes user name and email to realtime db
  //useful if your app displays information about users or for admin features

  let path = `users/${this.currentUserId}`; //Endpoint on Firebase
  let data = { name: this.currentUser.displayName, email: this.currentUser.email, }

  this.db.object(path).update(data)
  .catch(error => console.log(error));
}


}

【问题讨论】:

  • 我会试着找出答案。但它与 ES5 配置和节点有关。尝试将节点添加到您的 tsconfig.spec.json 类型数组。
  • 尝试这样做。 npm install firebase angularfire2@next --save
  • 以下是我的 tsconfig.spec.json 代码: { "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/规范”,“模块”:“commonjs”,“类型”:[“茉莉花”,“节点”]},“文件”:[“test.ts”,“polyfills.ts”],“包含”:[“ */.spec.ts", "*/.d.ts" ] }
  • @ninjadev1030 我尝试了你发布的命令,但我得到了一堆 npm 错误

标签: node.js angular typescript firebase firebase-authentication


【解决方案1】:

错误信息非常清楚。您从错误的路径导入。下面是一些正确的例子,看看导入位置。

import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFireDatabase } from 'angularfire2/database';

【讨论】:

  • 如果你在使用像 VSCode 这样具有良好打字稿支持的 IDE,你也应该在编辑期间在屏幕上获得视觉反馈。
  • 我使用的是 Atom,我可能会切换到 VSCode。感谢您的帮助。
  • 并安装 TSLint 和 Angular 6 Snippets 扩展
【解决方案2】:

您只需要更新您的导入语句。例如,要导入 auth 和 db 模块,您应该这样做:

import { AngularFireModule } from 'angularfire2';
import { AngularFireDatabaseModule, AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database';
import { AngularFireAuthModule, AngularFireAuth } from 'angularfire2/auth';

文档给出了full upgrade path

【讨论】:

  • 谢谢你的回答,我试试看。
  • 所以我试了一下,但问题还是一样:src/app/app.module.ts(18,39): error TS2307: Cannot find module 'angularfire2/auth'.跨度>
  • 嗯,听起来像是构建系统的问题。你在使用 webpack 吗?如果是这样,您可以在上面发布您的配置吗?否则,如果您使用的是 create-angular-app,您可以尝试删除 node_modules 并重新安装吗?
  • @QariZakariahSiyaji 看起来那个角包非常脆弱。阅读 GitHub 问题,您可能会更幸运地删除您的 node_modules,然后安装 angularfire2@5.0.0-rc.3(在您的 package.json 中指定)。这似乎是一个更可靠的版本。令人震惊的是,这个受欢迎的图书馆有这么多糟糕的版本......
  • @QariZakariahSiyaji 您删除了节点模块,安装了 angularfire2@5.0.0-rc.3,但仍然出现错误?如果是这样,您能否发布完整的错误并验证您安装的 angularfire2 的版本确实是 5.0.0-rc.3?
猜你喜欢
  • 2022-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
相关资源
最近更新 更多