Angular 2和Firebase SDK
我一直在尝试让Angular2应用程序与Firebase一起工作(参见此)。我安装了最新版本的Firebase,尝试使用SystemJS加载Firebase(请参阅),并尝试导入Firebase并使用函数Angular 2和Firebase SDK,angular,firebase,systemjs,Angular,Firebase,Systemjs,我一直在尝试让Angular2应用程序与Firebase一起工作(参见此)。我安装了最新版本的Firebase,尝试使用SystemJS加载Firebase(请参阅),并尝试导入Firebase并使用函数initializeApp(请参阅)。但是,我不断收到错误firebase.initializeApp不是浏览器控制台中的函数。我是否正确使用SystemJS加载firebase.js 注意:要复制错误,您只需执行npm安装,然后执行npm启动一个更改:从 import * as firebas
initializeApp
(请参阅)。但是,我不断收到错误firebase.initializeApp不是浏览器控制台中的函数。我是否正确使用SystemJS加载firebase.js
注意:要复制错误,您只需执行npm安装
,然后执行npm启动
一个更改:从
import * as firebase from 'firebase';
到
足以使您的示例与firebase 3.6一起工作
然而,我得说它是偶然起作用的firebase.js
看起来根本不像一个模块,它不使用module.exports
或amddefine
,它只创建具有以下属性的全局变量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
可能是由于存在\uu esModule
使得SystemJS将其包装到另一个对象中-如果您在调试器中查看导入*的结果,将其作为“firebase”中的firebase
导入,它包含一个名为firebase
的属性,这是您需要的实际模块
有趣的是,firebase.d.ts
的编写方式
import {firebase} from 'firebase';
firebase.initializeApp(...);
工作,但似乎相等
import * as firebase from 'firebase';
firebase.firebase.initializeApp(...);
不进行打字检查 这个问题有一个解决办法,有了它,我可以使用Firebase(3.6.7)和AngularFire2(2.0.0-beta.7)的最新版本
我不知道它是如何工作的,因为我只在Plunker中使用SystemJS,但它涉及到替换这个:
firebase: {
main: 'firebase.js'
}
为此:
firebase: {
defaultExtension: 'js',
main: './firebase-browser.js'
}
在传递给System.config
的配置的packages
属性中,我在为AngularFire2问题准备Plunker时遇到Firebase和SystemJS问题。我不得不使用3.4.0版。在以后的版本中,TypeScript定义中有一些东西SystemJS不喜欢,但我没有研究过。@cartant:是的,恢复到3.4.0版似乎可以解决SystemJS的问题。相应的firebase.js
文件似乎在3.4版和3.5版之间发生了更改。更高版本(>3.4)似乎在firebase.js
中包含了所有javascript,并且没有模块导出。而v3.4只是“需要”其他文件并导出模块“firebase”。我有一种感觉,这与以后版本中缺少模块导出有关,但不是完全确定。@artem:D'oh!当你知道你盯着屏幕看太久了。。。幸运的是,只有一个试验台——呸。谢谢你让我知道。删除了我对SystemJS的依赖并切换到Webpack。加载firebase.js并将其与Webpack一起使用没有问题。
firebase: {
defaultExtension: 'js',
main: './firebase-browser.js'
}