使用systemJS加载Firebase时缺少扩展

时间:2016-11-21 21:14:48

标签: firebase systemjs

我正在编写一个Angular2应用程序,该应用程序通过AngularFire2使用Firebase,并且我在加载Firebase文件时遇到了问题。 SystemJS引导应用程序,加载firebase.js,但由于缺少扩展名,后来无法加载其中所需的文件。特别是,它会向http://localhost:8080/node_modules/firebase/app而不是http://localhost:8080/node_modules/firebase/app.js发送请求。后者存在于捆绑中,因此绝对是正确的加载方式。

这是我的system.config.js

(function(global) {

// map tells the System loader where to look for things
var map = {
    'aviary':                               'js',
    'rxjs':                                 'npm:rxjs',
    'firebase':                             'npm:firebase/firebase.js',
    'firebase/app':                         'npm:firebase/app.js',
    'angularfire2':                         'npm:angularfire2',
    '@angular':                             'npm:@angular'
};

// packages tells the System loader how to load when no filename and/or no extension
var packages = {
    'aviary':                       { main: 'main.js',  defaultExtension: 'js' },
    'rxjs':                         { defaultExtension: 'js' },
    'angular2-in-memory-web-api':   { main: 'index.js', defaultExtension: 'js' },
    'angularfire2':                 { main: 'bundles/angularFire2.umd.js', defaultExtension: 'js'},

};
var ngPackageNames = [
    'common',
    'compiler',
    'core',
    'forms',
    'http',
    'platform-browser',
    'platform-browser-dynamic',
    'router',
    'router-deprecated',
    'upgrade',
];

// Individual files (~300 requests):
function packIndex(pkgName) {
    packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' };
}

// Bundled (~40 requests):
function packUmd(pkgName) {
    packages['@angular/'+pkgName] = { main: 'bundles/' + pkgName + '.umd.js', defaultExtension: 'js' };
}

// Most environments should use UMD; some (Karma) need the individual index files
var setPackageConfig = System.packageWithIndex ? packIndex : packUmd;

// Add package entries for angular packages
ngPackageNames.forEach(setPackageConfig);
var config = {
    map: map,
    packages: packages,
    paths: {
        'npm:': 'node_modules/'
    }
};

System.defaultExtension = true;
System.config(config);

})(this);

我尝试的其中一件事是

var packages = {
    //...
    'firebase':                     { defaultExtension: 'js' }
};

但这没有帮助。感觉这是一个配置问题,但我正在努力弄清楚如何让它做我需要的。

1 个答案:

答案 0 :(得分:1)

system.config.js中,firebase的包配置不适用,因为您将firebase映射到文件,而包配置基本上只适用于目录。仅当模块实际上只是一个文件时,映射到文件才有效。当需要从同一目录加载其他文件时,您必须将模块映射到目录并在包配置中使用main,如下所示:

var map = {
    ...
    'firebase': 'npm:firebase',
}

var packages = {
     ...
    'firebase':  { main: 'firebase-browser.js' }
}

注意:

  1. 您似乎不需要firebase/app

  2. 的单独映射
  3. 使用最新版本,firebase的主文件为firebase-browser.js,而不只是firebase.js

  4. 您在包配置中不需要defaultExtension: 'js',因为js已经是任何包的默认设置。

  5. 我不确定这条线的作用,当我删除它时没有任何改变:

    System.defaultExtension = true;