Importera en delad tjänst som finns utanför app-mappen i en Angular 2-app i TypeScript med SystemJS
Jag har två Angular 2-appar i följande struktur:
/app
/app1
/app2
/shared
Inuti mina Angular 2-komponenter (skrivna i TypeScript) importerar jag flera moduler (som finns i samma mapp) utan några problem: import { TestService1 } från './test1.service';
Men när jag försökte importera något från den delade mappen kunde det inte ladda den nödvändiga modulen vid körning (webbläsare). import { TestService2 } från '../shared/test2.service'; Webbläsaren säger: http://something.something.darkside/app/test2.service 404 (Inte hittad).
Jag kan använda defaultJSExtensions inställt på true och det kommer att lösa problemet. Men jag skulle vilja veta hur man konfigurerar systemjs korrekt för att hantera denna situation.
systemjs.config.js
(function (global) {
var ngPackageNames = [ bla, ng2packages... ];
//ng2 apps
var ngApps = [
'/app/app1',
'/app/app2'
];
var map = {
'@angular': '/node_modules/@angular',
'rxjs': '/node_modules/rxjs'
};
var packages = {
'rxjs': { defaultExtension: 'js' }
};
//adds package entries for each of the needed ng2 packages
ngPackageNames.forEach(function (pkgName) {
packages['@angular/' + pkgName] = System.packageWithIndex
? { main: 'index.js', defaultExtension: 'js' }
: { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' };
});
//adds map entries and package entries for the apps
ngApps.forEach(function (app) {
var appName = app.substring(app.lastIndexOf('/') + 1);
map[appName] = app;
packages[appName] = { main: appName + '.main.js', defaultExtension: 'js' };
});
System.config({ map: map, packages: packages });
})(this);
Svar #1
Inkludera mappens sökväg till ditt kartobjekt.
var map = {
'shared' : 'app/shared',
'@angular': '/node_modules/@angular',
'rxjs': '/node_modules/rxjs'
};
Lägg till i paket lägg
var packages = {
'rxjs': { defaultExtension: 'js' },
'shared': { defaultExtension: 'js' }
};
Svar #2
**User "defaultJSExtensions": true in system.config.js**
(function (global) {
System.config({
paths: {
'npm:': 'node_modules/'
},
"defaultJSExtensions": true,
map: {
