Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Javascript 使用requirejs加载firebase js时出错_Javascript_Firebase_Requirejs - Fatal编程技术网

Javascript 使用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

我用RequireJS加载Firebase js库,如下所示:

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再次起作用-

在本页找到了解决方案(仅对firebase版本>=5.5.6有效):

您必须像“@firebase/app”一样调用firebase.app.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();
});