Prüfen ob Script als Module läuft
bearbeitet vonHallo 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: ein bedingter Export ist syntaktisch verboten.
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:
~~~js
<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:
~~~js
export class Plotter {
constructor(canvas) {
...
}
plot(func) {
...
}
}
~~~
_Rolf_
--
sumpsi - posui - obstruxi