2016-04-15 10 views
0

Ich lade meine angular2 Datei als ein System js Modul von CDN.JSPM Bündelung mit externem System js Datei

Ich habe mehrere Dateien, die verschiedene System js Module von angular2 importiert.

Jetzt möchte ich meine lokalen Javascript-Dateien mit JSPM bündeln. Wenn ich den Befehl schreibe

"jspm bundle app/main build.js" 

JSPM schlägt fehl. Als JSPM versucht, angular2-Ordner in meinem Projekt zu finden. Ich kenne den Grund, dass es die in config.js definierte Karte überprüft. Aber ich möchte wissen, wie ich das überwinden kann. Da ich keine angular2-Datei in meinem lokalen Projekt installieren möchte und ich definitiv keine angular2-Datei von meinem Server an den Client-Browser liefern möchte, möchte ich CDN verwenden.

Bitte helfen.

+0

Warum möchten Sie es nicht gebündelt? JSPM ist ein Modulbündler, da es Abhängigkeiten kapselt und sie abruft, wenn ein Modul sie importiert. Es kann dieses dynamische Laden von einem CDN nicht ausführen, es sei denn, Sie haben eine Art von hackischem Abrufmechanismus in Ihren Code eingebaut. Soweit ich weiß, erwartet JSPM (und jeder andere Modul-Bundler), dass Ihre Abhängigkeiten explizit deklariert und lokal installiert werden, damit sie alle nach Bedarf gebündelt werden können. – ryanlutgen

+0

@ryanlutgen - Ich möchte das gleiche genaue Ergebnis, das Sie sagen, aber ich möchte andere System JS-Module von CDN laden. Und natürlich will ich sie nicht in meinem build.js. Ex. - Ich lade angular2 systemJs Modul von cdn und ich habe lokale Module wie - app1.js, app2.js ..... so weiter. Ich möchte ein Paket namens app.js erstellen, das alle meine lokalen Module enthält. Und dann benutze dieses Bündel zusammen mit angular2 Modul, das ich von CDN lade. Das Problem ist - ich kann meine lokalen Module nicht bündeln, da die Module angular2 und angular2 in jspm nicht konfiguriert sind, ich lade dieses Modul von CDN. –

Antwort

0

Endlich fand ich die Antwort, dies zu tun:

-System Js Konfigurationsoption nimmt auch eine Meta-Informationen. In dieser Metainfo können wir schreiben, um Module von SystemJs zu ignorieren, die gebündelt werden. Also sagen wir, ich lade alle angular2 Module von cdn, importiere sie in lokale Module und baue sie dann mit systemJs oder JSPM, dann muss ich folgendes in config.js schreiben (oder in das Options-Objekt von System.config):

meta: { 
     'angular2/*': { 
      build: false 
     }, 
     'rxjs/add/operator/map' : { 
      build : false 
     } 
    } 

Dies sollte von den angular2-Entwicklern in config.js eingegeben werden, um systemJs explizit zu informieren, damit sie bei der Bündelung der lokalen Module nicht nach angular2-Modulen und rxjs-Modulen suchen. Dies bietet Ihnen die Möglichkeit, angular2 und rxjs von cdn zu laden und sie folglich nicht in die Kartenoption von config.js aufzunehmen.

0

Wenn Sie bauen wollen und verwenden CDN zur gleichen Zeit (weil Sie ein paar Pakete konfiguriert von CDN mit SystemJS laden), können Sie alles aber die CDN-Pakete bauen. Zum Beispiel:

jspm bundle app/main.js - angular2 - whatever + somethingelse main-bundle.js --inject 

Andernfalls simplier, können Sie die CDN-Links direkt in dir index.html Dateien setzen und nur SystemJS für lokale Pakete verwenden.

+0

Hallo, es funktioniert nicht. Wenn Sie "jQuery" in Ihr lokales Entwicklungsmodul importieren, aber das jQuery-Modul von CDN in der Datei index.html laden, erhalten Sie beim Binden einen systemJS-Fehler. Dies liegt daran, dass SystemJs versucht, "jQuery" in der Map von config.js zu finden –