Antwort an „Rolf B“ verfassen

Hallo Jürgen,

das geht nicht, denke ich. Sobald export im Script steht, bricht der normale Script-Loader ab. Chrome: "Unbekanntes Token", Firefox: "export darf nur auf Top-Level eines moduls stehen." Die FF Meldung gibt Dir schon den Hinweis auf das Grundproblem: export wird nur im Modul verstanden und ein bedingter Export ist syntaktisch verboten. Aber sowas müsstest Du tun, wenn Du außerhalb eines ES6-Modul-Kontextes eine alternative Einbindung anbieten möchtest.

Wie möchtest Du überhaupt den export ersetzen, wenn es kein ECMA-Script Modul ist?

Warum möchtest Du überhaupt den export ersetzen? Wenn dein Caller kein ECMA-Script-Modul ist, kann er dein Modul mit der import-Funktion einbinden und die exportierten Gerätschaften über das Modul-Objekt nutzen.

Wenn der Brauser deines Caller kein import() beherrscht, rate ihr/ihm zum Browser-Update. ECMAScript-Modulsupport würde ich heutzutage als Pflicht ansehen. Du kannst nicht unbedingt verlangen, dass dein Caller seinen Code als Modul schreibt (könnte man, muss man aber nicht), aber sein Browser sollte Module unterstützen. Andernfalls hast Du vermutlich ganz andere Probleme in diesem Uraltbrowser.

Ein Adapter-Script zwischenzuschalten, das den import()-Aufruf kapselt, kann funktionieren - muss aber nicht. Die import()-Funktion ist asynchron, man MUSS wissen, dass sie genutzt wird und darauf warten, dass sie fertig ist. Und du möchtest in deinem Adapter-Script sicherlich keine busy-loop laufen lassen, bis das Modul verfügbar ist.

Der Benutzer:

<script>
import("./jb_plotter.js").then(runMyCode);

function runMyCode(jbModul) {
   const plotter = new jbModul.Plotter(myCanvas);
   plotter.plot(x => x**2);
}
</script>

Dein jb_plotter.mjs:

export class Plotter {
   constructor(canvas) { 
   ...
   }
   plot(func) {
   ...
   }
}

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen