一个变化:从
import * as firebase from 'firebase';
到
import {firebase} from '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
也许,它是__esModule
,使SystemJS来包装它的存在在另一个对象中 - 如果您在调试器中查看import * as firebase from 'firebase'
的结果,则它包含单个属性,也称为firebase
,它是您需要的实际模块。
有趣的是,firebase.d.ts
是写在这样一种方式,
import {firebase} from 'firebase';
firebase.initializeApp(...);
的作品,但似乎等同放着清单
import * as firebase from 'firebase';
firebase.firebase.initializeApp(...);
不进行类型检查。
我在准备针对AngularFire2问题的Plunker时遇到了Firebase和SystemJS的问题。我不得不使用3.4.0版本。在后来的版本中,TypeScript定义中有一些SystemJS只是不喜欢,但我没有看到它。 – cartant
@cartant:是的,恢复到版本3.4.0似乎解决了SystemJS的问题。相应的'firebase.js'文件似乎在版本3.4和3.5之间发生了变化。后来的版本(> 3.4)似乎在'firebase.js'中有所有的javascript,并且没有模块导出。而v3.4只是'需要'其他文件并导出模块'firebase'。我有一种感觉,这是与在后来的版本中缺少模块导出有关,但不能确定。 –
@artem:D'oh!那时候你知道你一直在盯着屏幕太久......幸运的是只有一张测试床 - 呃。谢谢你让我知道。 –