2016-07-23 7 views
5

mam dwa kątowe 2 aplikacje w następującej strukturze:importu wspólna usługa, która mieszka poza folderu aplikacji w kątowym 2 aplikacji na maszynie przy użyciu systemjs

/app
         /app1
         /app2
         /shared

Wewnątrz moich kątowych 2 komponentów (napisanych pismem maszynowym), importuję kilka modułów (znajdujących się w tym samym folderze) bez żadnych problemów: importuj {TestService1} z './test1.service';

Jednak gdy próbowałem zaimportować coś z folderu współdzielonego, nie można było załadować wymaganego modułu w czasie wykonywania (przeglądarce). importuj {TestService2} z "../shared/test2.service"; Przeglądarka mówi: http://something.something.darkside/app/test2.service 404 (nie znaleziono).

Mogę użyć zestawu defaultJSExtensions do wartości true, co spowoduje naprawienie problemu. Ale chciałbym wiedzieć, jak poprawnie skonfigurować systemsm, aby poradzić sobie z tą sytuacją.

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); 

Odpowiedz

4

zawierać ścieżkę folderu do mapy obiektu.

var map = { 
    'shared' : 'app/shared', 
    '@angular': '/node_modules/@angular', 
    'rxjs': '/node_modules/rxjs' 
}; 

Dodaj w pakiety dodać

var packages = { 
    'rxjs': { defaultExtension: 'js' }, 
    'shared': { defaultExtension: 'js' } 
}; 
+0

nie jest to kwestia importu maszynopis ów problem. To jak SystemJs ładuje pliki i moduły. Aby SystemJs mógł odwoływać się do importu, jego ścieżka musi być załadowana do SystemJS, stąd potrzeba mapowania. –

+0

Wystarczy, że potwierdzimy: potrzebujemy tylko dodatkowego wpisu systemjs.config.js, ponieważ ten plik znajduje się nad głównym punktem wejścia do aplikacji, prawda? np .. ..? systemjs wciąż żąda pliku z serwera. Chciałbym zrozumieć, jak to się dzieje. Ale zaznaczę to jako odpowiedź, gdy tylko potwierdzisz punkt numer jeden, aby inni mogli użyć tego jako punktu odniesienia. – SynBiotik

+0

Tak, to prawda. Idealnie, gdybyś miał ogólne mapowanie dla folderu "aplikacja", powinien poprawnie załadować pliki. Jednakże, ponieważ istnieją 2 aplikacje, które by mu to zaleciły. –

-1
**User "defaultJSExtensions": true in system.config.js** 


    (function (global) { 
     System.config({ 
     paths: { 
      'npm:': 'node_modules/' 
      }, 
     "defaultJSExtensions": true, 
     map: { 
+3

proszę dodać więcej wyjaśnień –

Powiązane problemy