mitmario.dev

Eingebaute Module

Node.js Sandbox 3 Min Lesezeit 3 BeispieleLektion 3 von 7

Node bringt eine ganze Werkzeugkiste mit, und die ist größer, als die meisten vermuten. Du musst nichts installieren, nichts herunterladen und nichts in eine package.json eintragen. Die Module sind da, sobald Node da ist.

Die Module, die in diesem Kurs vorkommen

Ein Überblick, damit du weißt, was noch kommt:

  • node:fs liest und schreibt Dateien. Abschnitt 3 gehört ihm ganz.
  • node:path setzt Pfade zusammen, ohne dass du Schrägstriche tippst. Kommt in der nächsten Lektion dran.
  • node:os beantwortet Fragen über den Rechner: Betriebssystem, Speicher, Prozessoren.
  • node:url zerlegt Adressen in ihre Bestandteile.
  • node:http baut einen Webserver. Damit fängt Abschnitt 8 an.
  • node:crypto macht Prüfsummen, Zufallswerte und Verschlüsselung. Abschnitt 14 braucht es für Passwörter.
  • node:sqlite spricht mit einer Datenbankdatei. Abschnitt 12.
  • node:test führt Tests aus. Abschnitt 17.

Die Liste ist nicht vollständig, es gibt noch etwa vierzig weitere. Aber diese acht begleiten dich durch den Kurs.

Was der Browser nie können wird
import os from "node:os";
import path from "node:path";

console.log("Plattform:", os.platform());
console.log("Typ:", os.type());
console.log("Zeilenende sichtbar gemacht:", JSON.stringify(os.EOL));
console.log("Endung:", path.extname("bericht.pdf"));

Schau dir node:os einen Moment an. Ein Programm im Browser kann nicht wissen, auf welchem Betriebssystem es läuft, weil es das schlicht nichts angeht. Hier ist es eine normale Frage mit einer normalen Antwort. Das ist der Unterschied zwischen einer Seite und einem Prozess auf einem Rechner.

os.EOL im Beispiel ist das Zeilenendezeichen des Systems. Es steht in Anführungszeichen, weil JSON.stringify es sichtbar macht. Würdest du es direkt ausgeben, sähest du nur einen Umbruch.

Auch die großen Themen sind schon da

Kryptografie klingt nach einem Thema, für das man ein Paket installiert. Muss man aber nicht.

Kryptografie ohne Paket
import { createHash, randomUUID } from "node:crypto";

const hash = createHash("sha256").update("Programmieren mit Mario").digest("hex");

console.log("Hash:", hash);
console.log("UUID-Länge:", randomUUID().length);

Eine SHA-256-Prüfsumme, eine zufällige UUID, und das ganz ohne Abhängigkeit. Der Hash ist bei gleichem Text übrigens immer derselbe, das ist der Sinn der Sache. Die UUID ändert sich bei jedem Aufruf, deshalb misst das Beispiel nur ihre Länge.

Das ist eine Gewohnheit, die sich lohnt: Bevor du ein Paket suchst, schau nach, ob Node es schon kann. Jede Abhängigkeit, die du nicht hast, kann auch nicht kaputtgehen und dich nicht in einen Sicherheitsvorfall ziehen. Abschnitt 15 kommt darauf ausführlich zurück.

Warum überall node: davorsteht

Dir ist sicher aufgefallen, dass alle Importe hier mit node: beginnen. Das ist die empfohlene Schreibweise, und sie hat drei handfeste Gründe.

Sie ist eindeutig. Wer import fs from "node:fs" liest, weiß sofort: eingebaut. Bei import fs from "fs" muss man raten oder nachschauen, ob im Projekt vielleicht ein Paket namens fs liegt.

Sie ist ehrlich gegenüber Werkzeugen. Bündler, Linter und Sicherheitsscanner können eingebaute Module am Präfix erkennen, ohne eine Liste aller Node-Versionen zu pflegen.

Und bei manchen Modulen ist sie Pflicht. Die neueren unter ihnen gibt es ausschließlich mit Präfix, node:test und node:sqlite zum Beispiel.

Ohne Präfix sucht Node ein Paket
// node:sqlite gibt es nur mit Präfix. So sucht Node nach einem Paket.
import { DatabaseSync } from "sqlite";

console.log(DatabaseSync);

Lies die Fehlermeldung genau: Cannot find package 'sqlite'. Nicht Modul, sondern Paket. Ohne Präfix hat Node den Namen für eine Abhängigkeit gehalten und in node_modules gesucht.

Bei den älteren Modulen funktioniert die Schreibweise ohne Präfix weiterhin, und du wirst sie in bestehendem Code ständig sehen. Nimm für eigenen Code trotzdem das Präfix. Es kostet fünf Zeichen und erspart dir eine Frage.

Zum Mitnehmen

Manche eingebauten Module gibt es ausschließlich mit dem node:-Präfix. Ohne das Präfix sucht Node nach einem Paket, das es nicht gibt.

Jetzt du

Basis Konto, kostenlos

Zu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.

Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.

In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.

Was in dieser Lektion steckt

  • Artikel mit 3 Beispielen zum Ausprobieren

    Steht hier, ohne Konto lesbar.

  • Aufgabe, dein Code läuft auf einem Server

    Öffnet sich mit dem Basis Konto.