使用systemJS加载Firebase时缺少扩展
我正在编写一个Angular2应用程序,它通过AngularFire2使用Firebase,我在加载Firebase文件时遇到了麻烦。SystemJS引导应用程序,加载使用systemJS加载Firebase时缺少扩展,firebase,systemjs,Firebase,Systemjs,我正在编写一个Angular2应用程序,它通过AngularFire2使用Firebase,我在加载Firebase文件时遇到了麻烦。SystemJS引导应用程序,加载firebase.js,但随后由于缺少扩展名而无法加载其中所需的文件。特别是,它向http://localhost:8080/node_modules/firebase/app而不是http://localhost:8080/node_modules/firebase/app.js。后者存在于捆绑包中,因此绝对是正确的加载对象 这
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' }
};
但这没有帮助。这感觉像是一个配置问题,但我正在努力弄清楚如何让它满足我的需要。在
system.config.js
中,firebase
的包配置不适用,因为您将firebase
映射到了一个文件,包配置基本上只适用于目录。只有当模块实际上只是一个文件时,映射到文件才起作用。当需要从同一目录加载其他文件时,您必须将模块映射到该目录,并在package config中使用main
,如下所示:
var map = {
...
'firebase': 'npm:firebase',
}
及
注:
firebase/app
firebase browser.js
,而不仅仅是firebase.js
defaultExtension:'js'
,因为js
已经是任何包的默认值System.defaultExtension = true;
System.defaultExtension = true;