2014-09-16 5 views
7

Ich habe in letzter Zeit eine Menge ES6 geschrieben, mit import {variable} from 'ES6module' Syntax, und kompilieren Sie den Code im Browser mit traceur-compiler. Ich fing an, systemjs zu betrachten, da es mir den Anschein hatte, als könnte ich die gleiche Syntax verwenden, um AMD, commonJS, und ES6-Module zu importieren.Import commonJS, AMD und ES6-Module zur Laufzeit mit synchroner Syntax

Das Lesen der Dokumentation hat mich jedoch verwirrt. Ich sehe viele asynchrone Aufrufe wie System.import('path/to/module').then(function(variable) { ... }), die ich für den Import von Abhängigkeiten nicht gewohnt bin.

Ich habe gelesen Practical workflows for ES6 modules, die viele verschiedene Arbeitsabläufe umfasst, von denen keine beinhaltet ein ES6-Modul und ein AMD/Commonjs-Modul zur Laufzeit zu importieren. Ich denke, so etwas wie dieses:

import {myObject} from 'my/es6/module'; 
import {_} from 'lib/underscore'; 

oder wenn nicht, als zumindest:

import {myObject} from 'my/es6/module'; 
var _ = require('lib/underscore'); 

sind entweder dieser möglich mit systemjs?

Antwort

9

Dieser Anwendungsfall ist genau das, wofür SystemJS entwickelt wurde.

können Sie schreiben:

import {myObject} from 'my/es6/module'; 
import _ from 'lib/underscore'; 

Der Grund ist, weil Commonjs, AMD und Global Module in SystemJS wie behandelt werden, wenn sie eine default Eigenschaft nur exportieren, die oben auf dem Standard-Import Syntax entspricht.

+0

Super! Und ich denke, das bedeutet auch, dass spätere Aufrufe von 'import _ from 'lib/underscore';' das bereits importierte Modul wiederverwenden wird? – bennlich

+0

Ja genau - Modul Instanzen sind geteilt. – guybedford