我正在编写一个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' }
};
但这没有帮助。感觉这是一个配置问题,但我正在努力弄清楚如何让它做我需要的。
答案 0 :(得分:1)
在system.config.js
中,firebase
的包配置不适用,因为您将firebase
映射到文件,而包配置基本上只适用于目录。仅当模块实际上只是一个文件时,映射到文件才有效。当需要从同一目录加载其他文件时,您必须将模块映射到目录并在包配置中使用main
,如下所示:
var map = {
...
'firebase': 'npm:firebase',
}
和
var packages = {
...
'firebase': { main: 'firebase-browser.js' }
}
注意:
您似乎不需要firebase/app
使用最新版本,firebase的主文件为firebase-browser.js
,而不只是firebase.js
您在包配置中不需要defaultExtension: 'js'
,因为js
已经是任何包的默认设置。
我不确定这条线的作用,当我删除它时没有任何改变:
System.defaultExtension = true;