Javascript 使用requirejs加载firebase js时出错
我用RequireJS加载Firebase js库,如下所示:Javascript 使用requirejs加载firebase js时出错,javascript,firebase,requirejs,Javascript,Firebase,Requirejs,我用RequireJS加载Firebase js库,如下所示: require([ 'firebase-app', 'firebase-storage' ], function (firebase) { firebase.initializeApp({...}); firebase.storage(); }); 在Firebase js 4.12.1版之前,一切正常,从4.13.0版开始,我在“Firebase.storage()”调用中遇到以下错误: Type
require([
'firebase-app',
'firebase-storage'
], function (firebase) {
firebase.initializeApp({...});
firebase.storage();
});
在Firebase js 4.12.1版之前,一切正常,从4.13.0版开始,我在“Firebase.storage()”调用中遇到以下错误:
TypeError:无法读取未定义的属性“registerService”
在firebase(index.esm.js:3442)
在index.esm.js:3434
及
未捕获错误:无法实例化firebase存储-请确保先加载firebase-app.js。
在firebase(index.esm.js:3444)
在index.esm.js:3434
在Firebase 4.13.0发行说明中,我认为有以下更改破坏了我的代码:
[CHANGED]经过重构,将core js用于我们的Polyfills/垫片
“core js”是这个库:
以下是JSFIDLE示例:
- 图书馆4.12.1-(旧的和有效的图书馆)
- 图书馆4.13.0-
- 图书馆5.4.0-
- 仅加载完整的js再次起作用-
最终的JSFIDLE:添加了JSFIDLE示例如果我记得很清楚,RequireJS不能保证特定的加载顺序,所以如果您的假设是正确的,您需要找到一种在存储之前真正加载应用程序的方法。如果我是对的,在您的情况下,此解决方案(或其风格)将是合适的:。这不是订单问题,根据您的建议,我得到另一个错误:“未捕获错误:不匹配的匿名定义()模块:…”请参阅新示例添加的工作版本和完整的firebase js库,但它迫使下载大量未使用的脚本,如4.12.1到4.13.0的跳转是一个重要的重构。app.js的定义方式已经改变,这可能是破坏它的原因。有趣的是,5.4.0存储似乎仍然可以与4.12.1应用程序配合使用,这表明这是应用程序本身的一个问题,特别是在导入什么存储和导出什么应用程序方面。firebase对象似乎在该过程中丢失。如果无法切换到npm或类似系统,一个棘手的解决方法是首先加载firebase并将其分配到全局范围。但不知道副作用::[
var config = {
paths: {
'@firebase/app': 'https://www.gstatic.com/firebasejs/5.7.1/firebase-app',
'@firebase/storage': 'https://www.gstatic.com/firebasejs/5.7.1/firebase-storage'
}
};
require([
'@firebase/app',
'@firebase/storage'
], function (firebase) {
firebase.initializeApp({
...
});
firebase.storage();
});