2015-05-04 12 views
10

Wie kann ich ES6-Module laden? Von faul, ich meine, ich möchte Module nicht wirklich laden, die nicht benötigt werden. Zum Beispiel, hier ist etwas, das ich mit RequireJS tun können:Wie funktioniert das faule Modulladen in ES6?

function someEventHandler() { 
    var SomeModule = require('some-module'), 
     module = new SomeModule(); 
    // ... 
} 

Etwas auf der gleichen Linie scheint nicht möglich zu sein ES6 Einfuhren mit:

// Doesn't appear to be valid... 
function someEventHandler() { 
    import SomeModule from 'some-module'; 
    var module = new SomeModule(); 
    // ... 
} 

Gibt es tragfähige Techniken nur ziehen in Abhängigkeiten bei Bedarf mit ES6-Modulen? Oder ist der einzige Pfad, um den vollständigen Abhängigkeitsgraphen zu verfolgen und alles im Voraus zu holen?

+0

Sie haben die Systemloader-API zu verwenden. Siehe [Import dynamischer Module in Ember CLI] (http://stackoverflow.com/q/26728035/218196) –

+0

Nein, es ist nicht möglich, die 'import'-Syntax zu verwenden. Sie können jedoch ein asynchrones (!) Äquivalent der 'require' -Funktion verwenden. – Bergi

Antwort

15

Die Anweisung import funktioniert nur ganz oben in Dateien, und alle werden geladen. Dies dient hauptsächlich dazu, potenzielle Probleme mit zirkulären Abhängigkeiten zu vermeiden.

Es wird auch eine Möglichkeit geben, asynchrones Laden durchzuführen; Die Spezifikation scheint jedoch noch nicht abgeschlossen zu sein. Das ES6 module loader polyfill-Paket verwendet eine Methode namens System.import(moduleName), die ein Versprechen gibt und die endgültige Spezifikation ist wahrscheinlich ähnlich aussehen:

function someEventHandler() { 
    System.import('some-module').then((SomeModule) => { 
     var module = new SomeModule(); 
     // ... 
    }) 
} 
+0

Gibt es Updates zur Bereitschaft dieser Syntax? – fegemo

+5

Es gibt jetzt einen Vorschlag für den dynamischen Import von JavaScript: https://github.com/tc39/proposal-dynamic-import. Es gibt eine einfache 'import()' Funktion für den globalen Bereich an. WebPack 2 unterstützt diese sinve Version v2.1.0-beta.28. – jbandi