2015-01-13 5 views
15

Ich möchte ein Modul mit der ES6-Syntax nur dann exportieren, wenn es in der aktuellen Laufzeit unterstützt wird. Ziel ist es, eine Bibliothek zu entwickeln, die verschiedene Modulmanagementsysteme unterstützt.Wie man es6 Module erkennt

Als export ist ein Schlüsselwort, so etwas wie einen Syntaxfehler werfen:

typeof export 
+1

nein sogar in ES5 'export' und' import' sind reservierte Schlüsselwörter und es wirft einen Syntaxfehler auf, der nicht abgefangen werden kann – krampstudio

+0

Ich denke, dass Sie ES6 Syntax verwenden sollten; und verteilen Sie eine Version, die von 6 zu 5 kompiliert wird. – Bergi

+0

möglich Duplikat von [Wie kann ich ES6-Generatoren erkennen?] (Http://stackoverflow.com/questions/23096064/how-can-i-feature-detect-es6-generators) – JJJ

Antwort

4

Revision 27 der spec hatte eine Reflect.Loader API, die für die Modul Reflexion verwendet werden könnten.

Dies ist zwar keine direkte Merkmalserkennung für das Schlüsselwort export, aber möglicherweise war es möglich, ein Modul zu laden, das Exportschlüsselwörter aus einem Daten-uri verwendet, und zu prüfen, ob es Parsefehler auslöst oder nicht.

Aber es hat mit Revision 28, mit dem folgenden Eintrag hinzu entfernt:

entfernt loader-Pipeline und Reflect.Loader API (Funktionalität getrennte Spezifikation übertragen werden)


Soweit ich das beurteilen kann, scheint die Spezifikation zum Zeitpunkt des Schreibens keine Möglichkeit zur Merkmalserkennung zu bieten.

In Zukunft könnte es mit Reflect.Loader oder deren Ersetzungen möglich sein.

Edit: Die loader spec scheint entwickelt von der Whatwg verwaltet werden, aber es ist noch nicht in einem Zustand, aus dem wir Feature-Erkennung ableiten könnten.

+0

Hat das Zukunft ist schon angekommen? – vsync

+0

Wenn der Vorschlag https://github.com/domenic/proposal-import-function Realität wird ([in Stufe 2] (https://github.com/tc39/proposals/blob/master/README.md) richtig Jetzt werden wir leicht nach 'typeof import === 'function'' suchen – krampstudio