Rolf B: Problem mit module export

Beitrag lesen

Hallo Michael_K,

ich kriege eine Fehlermeldung, dass "use strict" keine Funktion sei. Hinter "use strict" gehört ein Semikolon, allerdings gehört "use strict"; in ein Modul genauso wenig hinein wie ein IIFE Konstrukt.

Module sind

  • keine normalen Scripte
  • isoliert, alles was nicht exportiert wird ist lokal im Modul
  • grundsätzlich im strict mode
  • grundsätzlich deferred, d.h. sie werden asynchron geladen und ausgeführt, wenn das DOM fertig ist. Aber noch bevor das DOMContentLoaded-Event ausgelöst wird.
  • werden nur einmal geladen, auch wenn sie drölf mal importiert werden. Deine Erstinitialisierungslogik ist unnötig. Es gibt das MTO Objekt nur einmal.

Und wie dedlfix schon sagte - die Zuweisung an window.MTO ist kontraproduktiv. Du willst dein MTO Objekt per Export bereitstellen, so dass der Nutzer es importiert.

Also:

modul.js

function resolver() {
  // resolve something
}

const MTO = {
   transform: function() {
      // transform something
   },
   mutate() {
      // mutate something
   }
};

export default MTO;

Ich verwende bei mutate die neuere Schreibweise für Objektmethoden. Das ist kürzer als die alte Schreibweise, die ich zum Vergleich bei transform verwendet habe.

Die Variable MTO brauchst Du genau genommen gar nicht. Du exportierst sie als Default, das ginge auch so:

export default {
   transform() { ... },
   mutate() { ... }
};

Und das kannst Du dann ganz normal importieren, so oft wie Du willst.

<script type="module">
import WTO from "./mto.js";
import MTO from "./mto.js";

WTO.transform("world");
MTO.mutate("genes");

WTO.magic = 13;           // setze neues Property auf WTO
console.log(MTO.magic);   // lese Property von MTO, gibt trotzdem 13 aus 
</script>

Die Zuweisung der 13 an WTO.magic zeigt, dass ein mehrfacher Import das Modul nicht mehrfach erzeugt. WTO und MTO referenzieren das gleiche Objekt.

Rolf

--
sumpsi - posui - obstruxi