Aus dem Kurs: Node.js lernen

Module erstellen und einbinden: require()

Aus dem Kurs: Node.js lernen

Module erstellen und einbinden: require()

Maßgeblich zum Erfolg von Node.js hat auch das Modulsystem beigetragen. Mit ihm können Sie komplexere Programme in kleinere Teile zerlegen, die sich dann deutlich besser warten lassen. Node.js hält sich dabei an den CommonJS-Standard. Wie dieses Modulsystem funktioniert, zeige ich Ihnen an diesem kleinen Beispiel. Hier habe ich ein JavaScript-Programm, das mir den größten gemeisnamen Teiler von 35 und 10 berechnet. Die eigentliche Berechnung übernimmt eine Funktion namens ggT. Diese Funktion könnte aber auch in anderen oder zukünftigen Projekten äußerst nützlich sein. Um eine Funktion einfacher wiederverwenden zu können, lagere ich sie erst einmal in eine eigene Datei aus. Diese Datei nenne ich ggt.js. Ich kann jetzt meine Funktion an einer zentralen Stelle pflegen, nämlich hier in dieser Datei. Sollte ein Fehler in der Funktion entdeckt werden, kann ich ihn direkt hier beheben. Des Weiteren lässt sich meine Funktion viel einfacher und unabhängig vom Hauptprogramm testen. Darüber hinaus ist mein Hauptprogramm auch schön übersichtlich geworden. Fragt sich jetzt nur noch, wie mein Programm an die Funktion ggT kommt, denn die wäre ja jetzt hier im Moment unbekannt. Dazu muss ich zunächst in dieser Datei Node.js noch mitteilen, dass die Funktion ggT auch in anderen Dateien genutzt werden darf. Das erledige ich mit der Anweisung module.exports =. Dahinter folgt jetzt die Funktion, die andere Programmteile nutzen können sollen. In meinem Fall also die Funktion ggT. Als Nächstes muss ich hier in meinem Programm die Funktion hinzuholen. Dafür kennt Node.js die spezielle Funktion require. Mit ihr kann ich Objekte und Funktionen aus einer anderen Datei importieren. Ich muss require lediglich den Dateinamen samt Dateipfad übergeben, bei mir ist das ./ggt.js. Require liefert mir aus der anderen Datei meine exportierte Funktion zurück. Die fange ich hier direkt auf in, sagen wir mal, "const ggT". Ich könnte hier auch einen anderen Bezeichner verwenden, dann müsste ich aber hier unten den Funktionsaufruf entsprechend anpassen. Wenn ich jetzt mein Programm speichere und aufrufe mit "node app.js", dann berechnet es mir den größten gemeinsamen Teiler von 35 und 10. Noch einmal kurz zusammengefasst: Meine Funktion ggT möchte ich in verschiedenen JavaScript-Programmen verwenden. Dazu lagere ich sie zunächst in eine eigene Datei aus. In ihr teile ich Node.js zudem mit, dass andere JavaScript-Programme diese Funktion nutzen dürfen. In meinem eigentlichen Programm hole ich mit require die Funktion aus der entsprechenden Datei hinzu, wobei mir dann require die Funktion zurückliefert, die ich dann wiederum in ggT ablege. Anschließend kann ich die Funktion verwenden. Eine solche Datei mit JavaScript-Code bezeichnet Node.js als Modul. Die Anweisung module.exports exportiert ein Objekt aus diesem Modul, das dann require in diesem Modul wieder importiert. Auf diese Weise kann man Objekte und Funktionen an andere Module weiterreichen.

Inhalt