0

Ich habe viele js es6 Module kompiliert von Closure Compiler (Advanced level) in einer einzigen Bibliotheksdatei.Wie exportiert man Symbole aus Modulen, die vom Closure Compiler kompiliert wurden?

Ich konnte einige Symbole nicht mit /** @export */ exportieren oder goog.exportSymbol('whatever', whatever) zu nicht kompiliertem Javascript in HTML-Seiten verwenden.

Wie geht das?

Remarque: Wenn ich die es6 import/export von goog.require/goog.provide in allen Modulen ersetzen, es funktioniert und ich kann erfolgreich diese Symbole in HTML-Seiten verwenden.

Antwort

0

Nach weiteren Untersuchungen fand ich die Lösung.

Obwohl im Browser ohne Fehler in der Konsole geladen (außer undefined whatever natürlich), meine Bibliothek wurde nicht ausgeführt. Ich habe einfach die Closure-Bibliothek vor dem zu kompilierenden Datei-Stack verschoben und meine Bibliothek wurde dann ordnungsgemäß vom Browser ausgeführt, wobei meine Symbole ordnungsgemäß exportiert wurden.

Die 3 Möglichkeiten, Symbole zu exportieren, funktionieren in kompilierten es6 Modulen: /** @export */ whatever, goog.exportSymbol('whatever', whatever), window['whatever'] = whatever. Die ersten 2 sind ein praktischer Weg für den dritten.

Fort weitere Details zu sehen No exported symbols with es6 modules library compiled by Closure Compiler

0

Sie können @export nicht in einem Modul verwenden, aber goog.exportSymbol sollte funktionieren. Ihre andere Option ist, sie manuell zu exportieren:

window['whatever'] = whatever; 
+0

Weder 'goog.exportSymbol' noch' Fenster [ 'was auch immer'] = whatever' Arbeit für mich: Wenn ich setze 'Object.keys (Fenster)' in der Browser-Konsole I kann nur die verschleierten Symbole sehen (Derselbe Code generiert korrekt unverschleierte Symbole, wenn 'goog.require' /' goog.provide' anstelle von es6 'import' /' export' verwendet wird). –

+0

Das bedeutet, dass etwas anderes vor sich geht. Sie müssen einen vollständigen Fall der minimalen Reproduktion des Problems veröffentlichen. –

Verwandte Themen