Kapitel 31. Modulsysteme und Paketmanager
Inhaltsverzeichnis
Das Buch kaufen
(Werbung, bitte nicht blockieren.)

Kapitel 31. Modulsysteme und Paketmanager

JavaScript hat keine eingebaute Unterstützung für Module, aber die Community hat beeindruckende Workarounds geschaffen. Um Module zu verwalten, können Sie sogenannte Paketmanager verwenden, die die Erkundung, Installation, Abhängigkeitsverwaltung und mehr übernehmen.

Modulsysteme

Die beiden wichtigsten (und leider inkompatiblen) Standards für JavaScript-Module sind:

CommonJS Modules (CJS)

Die dominante Inkarnation dieses Standards sind Node.js-Module (Node.js-Module haben einige Funktionen, die über CJS hinausgehen). Zu den Merkmalen gehören

  • Kompakte Syntax
  • Für synchrone Ladevorgänge konzipiert
  • Hauptverwendung: Server
Asynchronous Module Definition (AMD)

Die beliebteste Implementierung dieses Standards ist RequireJS. Zu den Merkmalen gehören

  • Etwas kompliziertere Syntax, die es AMD ermöglicht, ohne eval() oder einen statischen Kompilierungsschritt zu funktionieren
  • Für asynchrone Ladevorgänge konzipiert
  • Hauptverwendung: Browser

Paketmanager

Wenn es um Paketmanager geht, ist npm (Node Packaged Modules) die kanonische Wahl für Node.js. Für Browser sind (unter anderem) zwei Optionen beliebt:

Schnelle und schmutzige Module

Für die normale Webentwicklung sollten Sie ein Modulsystem wie RequireJS oder Browserify verwenden. Manchmal möchten Sie aber auch einfach einen schnellen Hack zusammenstellen. Dann kann das folgende einfache Modulmuster helfen:.

var moduleName = function () {
    function privateFunction () { ... }
    function publicFunction(...) {
        privateFunction();
        otherModule.doSomething();  // implicit import
    }
    return { // exports
        publicFunction: publicFunction
    };
}();

Das Vorherige ist ein Modul, das in der globalen Variablen moduleName gespeichert ist. Es tut Folgendes

  • Importiert implizit eine Abhängigkeit (das Modul otherModule)
  • Hat eine private Funktion, privateFunction
  • Exportiert publicFunction

Um das Modul auf einer Webseite zu verwenden, laden Sie einfach seine Datei und die Dateien seiner Abhängigkeiten über <script>-Tags.

<script src="modules/otherModule.js"></script>
<script src="modules/moduleName.js"></script>
<script type="text/javascript">
    moduleName.publicFunction(...);
</script>

Wenn beim Laden eines Moduls keine anderen Module aufgerufen werden (was bei moduleName der Fall ist), spielt die Reihenfolge, in der die Module geladen werden, keine Rolle.

Hier sind meine Kommentare und Empfehlungen

  • Ich habe dieses Modulmuster eine Weile verwendet, bis ich herausfand, dass ich es nicht erfunden hatte und dass es einen offiziellen Namen hatte. Christian Heilmann hat es populär gemacht und es das „revealing module pattern“ genannt.
  • Wenn Sie dieses Muster verwenden, halten Sie es einfach. Fühlen Sie sich frei, den globalen Geltungsbereich mit Modulnamen zu verschmutzen, aber versuchen Sie, eindeutige Namen zu finden. Es ist nur für Hacks, daher gibt es keinen Grund, schick zu werden (verschachtelte Namespaces, Module, die über mehrere Dateien verteilt sind usw.).
Weiter: 32. Weitere Tools