Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 2和Firebase SDK_Angular_Firebase_Systemjs - Fatal编程技术网

Angular 2和Firebase SDK

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

我一直在尝试让Angular2应用程序与Firebase一起工作(参见此)。我安装了最新版本的Firebase,尝试使用SystemJS加载Firebase(请参阅),并尝试导入Firebase并使用函数
initializeApp
(请参阅)。但是,我不断收到错误
firebase.initializeApp不是浏览器控制台中的函数。我是否正确使用SystemJS加载
firebase.js

注意:要复制错误,您只需执行
npm安装
,然后执行
npm启动

一个更改:从

import * as firebase from 'firebase';

足以使您的示例与firebase 3.6一起工作

然而,我得说它是偶然起作用的
firebase.js
看起来根本不像一个模块,它不使用
module.exports
或amd
define
,它只创建具有以下属性的全局变量
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'
}