2016-12-15 5 views
4

私はAngular2 quickstartアプリをFirebaseで使用するようにしています(repository参照)。私はFirebaseの最新バージョンをインストールし、SystemJS(systemjs.config.jsを参照)を使用してfirebaseをロードしようとし、firebaseをインポートして、関数initializeAppapp.component.tsを参照)を使用してみました。しかし、私はブラウザのコンソールにエラーfirebase.initializeApp is not a functionを得ています。 SystemJSを正しく使用してfirebase.jsをロードしていますか?角2とFirebase SDK

:エラーを複製するには、あなただけのnpm start続いnpm installを行うことができるはず。

+1

AngularFire2の問題のPlunkerを準備するとき、私はFirebaseとSystemJSに問題がありました。私はバージョン3.4.0を使用しなければならなかった。それ以降のバージョンでは、TypeJScriptの定義にSystemJSが好きではないものがありますが、私はそれを調べませんでした。 – cartant

+0

@cartant:はい、バージョン3.4.0に戻すと、SystemJSの問題が解決されたようです。それぞれの 'firebase.js'ファイルは、バージョン3.4と3.5の間で変更されたようです。それ以降のバージョン(> 3.4)では 'firebase.js'にすべてのjavascriptがあり、モジュールの書き出しはありません。一方、v3.4は単に他のファイルを必要とし、モジュール 'firebase'をエクスポートします。私は、それ以降のバージョンではモジュールのエクスポートの不足と関係があると思いますが、必ずしもそうではありません。 –

+0

@artem:D'oh!それはあなたが長い間スクリーンを見つめていることを知ったときです...幸いなことに、テストベッドのみです。知らせてくれてありがとうございます。 –

答えて

5

1つの変更:

import * as firebase from 'firebase'; 

から

import {firebase} from 'firebase'; 

にはあなたの例は、firebase 3.6で動作させるには十分です。

しかし、私はそれが偶然働いていると思います。 firebase.jsは全くのモジュールのようには見えませんが、それはmodule.exportsを使用するか、またはdefineをamdのいない、それだけで次のプロパティを持つグローバル変数firebaseを作成します。おそらく

INTERNAL: Object 
Promise: Promise() 
SDK_VERSION: "3.6.4" 
User: (a, b, c) 
__esModule: true 
app: a(a) 
apps: (...) 
get apps:() 
auth: (c) 
database: (c) 
default: Object 
initializeApp: (a, c) 
messaging: (c) 
storage: (c) 
__proto__: Object 

、それはSystemJSがそれをラップすることができ__esModuleの存在です別のオブジェクトで - import * as firebase from 'firebase'の結果でデバッガを見ると、必要な実際のモジュールであるfirebaseという名前の単一のプロパティが含まれています。

興味深いことに、firebase.d.ts

import {firebase} from 'firebase'; 

firebase.initializeApp(...); 

作品、一見equvalentが

import * as firebase from 'firebase'; 

firebase.firebase.initializeApp(...); 

です。TypeCheckないように書かれています。

0

この問題の回避策はhereであり、Firebase(3.6.7)とAngularFire2(2.0.0-beta.7)の最新バージョンで作業することができました。私はPlunkerでSystemJSを使うとどのように動作する

、私は、わかりませんが、それはこれを置き換える含まれます。これで

firebase: { 
    main: 'firebase.js' 
} 

firebase: { 
    defaultExtension: 'js', 
    main: './firebase-browser.js' 
} 

packagesプロパティに設定はSystem.configに渡されます。

関連する問題